API TransConvert
Tukar imej dan dokumen secara programatik dengan satu titik akhir HTTP yang mudah.
curl -X POST \ .../api/v1/convert.php \ -H "Authorization: Bearer ..." \ -F "category=image" \ -F "target=PNG" \ -F "file=@photo.jpg" \ -o converted.png
Mula pantas
Daripada sifar kepada fail pertama yang ditukar dalam tiga langkah.
Daftar (atau naik taraf akaun sedia ada) ke Basic, Lite, Pro, atau Team, kemudian jana kunci daripada halaman akaun anda — anda boleh kembali dan melihatnya semula pada bila-bila masa.
POST fail anda ke titik akhir di bawah sebagai multipart/form-data, dengan kunci anda dalam header Authorization serta category + target ditetapkan.
Respons 200 ialah bait mentah fail yang telah ditukar — simpan badan respons secara terus. Selain itu semuanya ialah ralat JSON yang menerangkan apa yang tidak kena.
Pengesahan
Setiap permintaan memerlukan kunci API, dihantar sebagai token Bearer dalam header Authorization.
Authorization: Bearer tc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Tersedia pada pelan Basic, Lite, Pro, dan Team. Jana kunci daripada akaun anda →
Uji kunci anda
Cara pantas untuk mengesahkan kunci berfungsi sebelum menulis sebarang kod integrasi sebenar — ini sahaja tidak akan menukar apa-apa (tiada fail dilampirkan), tetapi 400 no_file dan bukannya 401 mengesahkan kunci itu sendiri sah.
curl -X POST -H "Authorization: Bearer tc_live_your_key_here" -F "category=image" https://transconvert.com/api/v1/convert.php
Titik akhir
Satu titik akhir mengendalikan setiap penukaran. Hantar permintaan POST multipart/form-data dengan fail anda dan medan-medan di bawah.
https://transconvert.com/api/v1/convert.php
Parameter
| Field | Description |
|---|---|
Authorization | Wajib. "Bearer tc_live_...". |
category | Wajib. "image" atau "document" — untuk memampatkan dan bukannya menukar, lihat Mampat di bawah. |
target | Wajib. Kod format output, cth. "PNG", "DOCX" — lihat Format yang disokong di bawah. |
file | Wajib. Fail yang hendak ditukar (muat naik multipart). |
pdf_mode | Pilihan, kategori image sahaja. "pages" (lalai, merasterkan setiap halaman) atau "extract" (mengeluarkan imej terbenam seadanya) — hanya relevan apabila sumbernya PDF. |
pdf_pages | Pilihan, kategori image sahaja. "all" (lalai) atau "first". |
pdf_quality | Pilihan, kategori image sahaja. "normal" (lalai, 150 DPI) atau "high" (300 DPI). |
Penukaran biasa
Rujukan pantas untuk pasangan popular — titik akhir yang sama mengendalikan kesemuanya, hanya dengan kombinasi category/target yang berbeza.
| Source → target | category | target |
|---|---|---|
| PNG → JPG | image | JPG |
| JPG → PNG | image | PNG |
| HEIC → JPG | image | JPG |
| WEBP → PNG | image | PNG |
| JPG → PDF | image | PDF |
| PDF → JPG | image | JPG |
| DOCX → PDF | document | PDF |
| PDF → DOCX | document | DOCX |
| PPTX → PDF | document | PDF |
| XLSX → PDF | document | PDF |
Respons
Jika berjaya (200): bait mentah fail yang telah ditukar, dengan header Content-Type dan Content-Disposition ditetapkan untuknya. Jika gagal: badan JSON berbentuk {"error": {"code": "...", "message": "..."}} dengan kod status HTTP yang sepadan — lihat Ralat di bawah.
| Header | Value |
|---|---|
Content-Type | Jenis MIME sebenar fail yang telah ditukar (cth. image/png, application/pdf). |
Content-Disposition | attachment; filename="..." — cadangan nama fail, sama seperti muat turun fail lain. |
Content-Length | Saiz badan respons dalam bait. |
Mampat
Kecilkan saiz fail tanpa menukar formatnya — format masuk sama dengan format keluar. Sepasang kategori berasingan daripada penukaran, iaitu image-compress dan document-compress, masing-masing dengan pilihannya sendiri di bawah.
image-compress
Format masuk sama dengan format keluar (JPG/PNG/WEBP/GIF) — target_percent ialah sasaran saiz hasil berbanding dengan asal secara kasar, bukan tetapan kualiti yang tetap.
| Field | Description |
|---|---|
category | Tetapkan kepada "image-compress". |
target_percent | Pilihan, 1–100 (lalai 60). Saiz sasaran sebagai anggaran peratusan daripada asal — nombor lebih kecil memampatkan dengan lebih kuat. |
file | Wajib. JPG, PNG, WEBP, atau GIF. |
curl -X POST \ https://transconvert.com/api/v1/convert.php \ -H "Authorization: Bearer tc_live_your_key_here" \ -F "category=image-compress" \ -F "target_percent=50" \ -F "file=@photo.jpg" \ -o compressed.jpg
document-compress
PDF masuk, PDF keluar, melalui pemampatan semula Ghostscript sendiri — tidak akan sekali-kali memulangkan fail yang lebih besar daripada yang dimuat naik (kembali kepada fail asal jika pemampatan semula tidak membantu).
| Field | Description |
|---|---|
category | Tetapkan kepada "document-compress". |
level | Pilihan: "low", "medium" (lalai), "high", atau "none". Pemampatan lebih tinggi mengorbankan lebih banyak kualiti visual, terutamanya pada imej/imbasan terbenam. |
grayscale | Pilihan. "1" untuk turut menukar kepada skala kelabu; biarkan kosong untuk warna penuh. |
file | Wajib. PDF yang tidak terbuka/dilindungi kata laluan (gunakan Buka Kunci PDF di laman web dahulu jika ia dilindungi). |
curl -X POST \ https://transconvert.com/api/v1/convert.php \ -H "Authorization: Bearer tc_live_your_key_here" \ -F "category=document-compress" \ -F "level=high" \ -F "file=@report.pdf" \ -o compressed.pdf
| Header | Value |
|---|---|
X-Original-Size | Saiz fail yang dimuat naik dalam bait, sebelum pemampatan. |
X-Saved-Percent | Anggaran berapa peratus lebih kecil hasilnya berbanding asal, sebagai peratusan nombor bulat (boleh jadi 0). |
Video & audio (async)
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
Bentuk POST multipart yang sama seperti titik akhir utama, pada URL yang berbeza.
https://transconvert.com/api/v1/convert-async.php
| Field | Description |
|---|---|
Authorization | Wajib. "Bearer tc_live_...". |
category | "video" atau "audio". |
target | Wajib — cth. "MP4", "MOV", "MP3", "WAV". |
file | Wajib. Fail yang hendak ditukar (muat naik multipart). |
webhook_url | Pilihan. URL http(s) untuk POST hasil kerja apabila selesai, selain hanya membuat tinjauan (polling) job-status.php. Mesti diselesaikan kepada alamat awam. |
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"
Respons (202 Accepted)
{ "job_id": "job_242e1555d78d166807aa56502f15d118", "status": "queued" }
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_...
{
"job_id": "job_242e1555d78d166807aa56502f15d118",
"status": "completed",
"category": "video",
"target_format": "MP4",
"created_at": "2026-08-26 19:17:47",
"download_url": "/api/v1/job-status.php?job_id=job_...&download=1",
"filename": "clip.mp4"
}
Webhook (pilihan)
Jika anda memberikan webhook_url semasa penghantaran, kami akan POST kandungan JSON yang sama ke situ sekali apabila kerja selesai — berjaya atau gagal — dan cuba semula beberapa kali jika titik akhir anda tidak bertindak balas. job-status.php tetap berfungsi sebagai alternatif.
POST your webhook_url { "job_id": "job_242e1555d78d166807aa56502f15d118", "status": "completed", "category": "video", "target_format": "MP4", "created_at": "2026-08-26 19:17:47", "download_url": "https://transconvert.com/api/v1/job-status.php?job_id=job_...&download=1", "filename": "clip.mp4" }
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.
Contoh
Permintaan yang sama dalam empat bahasa — pilih mana-mana yang sepadan dengan tindanan anda. Setiap satu menukar photo.jpg tempatan kepada PNG dan menyimpan hasilnya.
curl -X POST \ https://transconvert.com/api/v1/convert.php \ -H "Authorization: Bearer tc_live_your_key_here" \ -F "category=image" \ -F "target=PNG" \ -F "file=@photo.jpg" \ -o converted.png
<?php $ch = curl_init('https://transconvert.com/api/v1/convert.php'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer tc_live_your_key_here'], CURLOPT_POSTFIELDS => [ 'category' => 'image', 'target' => 'PNG', 'file' => new CURLFile('photo.jpg'), ], ]); $response = curl_exec($ch); $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status === 200) { file_put_contents('converted.png', $response); } else { $error = json_decode($response, true); echo $error['error']['message']; }
const form = new FormData(); form.append('category', 'image'); form.append('target', 'PNG'); form.append('file', new Blob([fs.readFileSync('photo.jpg')]), 'photo.jpg'); const res = await fetch('https://transconvert.com/api/v1/convert.php', { method: 'POST', headers: { Authorization: 'Bearer tc_live_your_key_here' }, body: form, }); if (res.ok) { fs.writeFileSync('converted.png', Buffer.from(await res.arrayBuffer())); } else { const { error } = await res.json(); console.error(error.message); }
import requests with open('photo.jpg', 'rb') as f: response = requests.post( 'https://transconvert.com/api/v1/convert.php', headers={'Authorization': 'Bearer tc_live_your_key_here'}, data={'category': 'image', 'target': 'PNG'}, files={'file': f}, ) if response.status_code == 200: with open('converted.png', '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.php') File.open('photo.jpg') do |file| req = Net::HTTP::Post::Multipart.new url, 'category' => 'image', 'target' => 'PNG', 'file' => UploadIO.new(file, 'image/jpeg', 'photo.jpg') 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('converted.png', 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", "image") .addFormDataPart("target", "PNG") .addFormDataPart("file", "photo.jpg", RequestBody.create(new File("photo.jpg"), MediaType.parse("image/jpeg"))) .build(); Request request = new Request.Builder() .url("https://transconvert.com/api/v1/convert.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("converted.png"), response.body().bytes()); } else { System.err.println(response.body().string()); } }
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).
{
"error": {
"code": "quota_exceeded",
"message": "Monthly API allowance of 5000 conversion-minutes reached.",
"limit": 5000,
"used": 5000
}
}
| 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 missing_target | "target" kosong. |
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. |
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. |
405 method_not_allowed | Kaedah HTTP salah — titik akhir ini hanya menerima POST. |
400 invalid_target | "target" bukan format output yang disokong untuk kategori tersebut. |
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). |
500 storage_failed | Pelayan tidak dapat menyimpan muat naik untuk pemprosesan latar belakang. Selamat untuk cuba semula. |
Mengendalikan ralat & cuba semula
Bercabang berdasarkan medan JSON "code", bukan teks "message" — kata-kata mungkin berubah dari semasa ke semasa, kod tidak. concurrency_limit berbaloi untuk dicuba semula dengan singkat selepas beberapa saat (ia hilang sebaik sahaja salah satu penukaran anda yang sedang berjalan selesai); quota_exceeded tidak akan selesai dengan sendirinya sehingga bulan depan, jadi jangan cuba semula dalam gelung. conversion_failed ialah satu-satunya kod di mana status HTTP masih penting: 503 ialah isu sementara di pihak pelayan yang berbaloi untuk satu percubaan semula yang singkat, manakala 400/415/422/500 bermaksud kombinasi fail/sasaran itu tepat tidak akan berjaya tidak kira berapa kali anda hantar semula. Menyemak saiz fail di pihak klien sebelum memuat naik mengelakkan pembaziran permintaan atas file_too_large yang sudah pasti berlaku.
Pelan & had
API berkongsi hadnya dengan pelan yang sama yang anda sudah gunakan di laman web — tiada apa-apa berasingan untuk dikonfigurasikan.
Basic
bolt2000 minit penukaran / bulan
upload_fileFail sehingga 2 GB
sync_alt50 permintaan serentak
speed30 permintaan/minit
Lite
bolt3000 minit penukaran / bulan
upload_fileFail sehingga 4 GB
sync_alt100 permintaan serentak
speed60 permintaan/minit
Pro
bolt5000 minit penukaran / bulan
upload_fileFail sehingga 10 GB
sync_altPermintaan serentak tanpa had
speed120 permintaan/minit
Team
bolt10000 minit penukaran / bulan
upload_fileFail sehingga 20 GB
sync_altPermintaan serentak tanpa had
speed240 permintaan/minit
tollDikongsi dengan kumpulan kredit bulanan pasukan, jika ia menggunakannya
Sebaik sahaja had seminit dikenakan, setiap respons menyertakan pengepala X-RateLimit-Limit dan X-RateLimit-Remaining; respons 429 turut menyertakan Retry-After (dalam saat) — gunakannya untuk memperlahankan sebelum mencapai had, bukan hanya bertindak balas selepas 429.
Format yang disokong
Enjin penukaran yang sama persis dengan yang digunakan laman web — tiada apa yang eksklusif untuk API atau eksklusif untuk laman web.
Diterima sebagai sumber:
JPG, PNG, GIF, WEBP, BMP, AVIF, PDF, PSD, TIFF, EPS, HEIC
Tersedia sebagai sasaran:
JPG, PNG, GIF, WEBP, BMP, AVIF, PDF, ICO, PSD, TIFF, EPS
Diterima sebagai sumber:
PDF, DOCX, DOC, PPTX, PPT, XLSX, XLS, RTF, ODT, ODP, ODS, HTML
Tersedia sebagai sasaran:
PDF, DOCX, DOC, PPTX, PPT, XLSX, XLS, RTF, ODT, ODP, ODS
Sumber dan sasaran (format masuk sama dengan format keluar):
JPG, PNG, WEBP, GIF
Sumber dan sasaran (format masuk sama dengan format keluar):
Sumber dan sasaran (format masuk sama dengan format keluar):
MP4, MOV, AVI, MKV, WEBM
Sumber dan sasaran (format masuk sama dengan format keluar):
MP3, WAV, OGG, AAC, FLAC, M4A, WMA, OPUS, AIFF, AMR, AU, CAF, AC3, DTS, GSM, IRCAM, MP2, TTA, VOC, W64, WV, SPX, RM
infoVideo dan audio — baik penukaran mahupun pemampatan — buat masa ini hanya tersedia di laman web: panggilan HTTP segerak kurang sesuai untuk tugas yang boleh mengambil masa beberapa minit.
Soalan lazim
Belum lagi — penukaran tersebut boleh mengambil masa beberapa minit, yang kurang sesuai untuk satu permintaan HTTP segerak. Ia tersedia di laman web hari ini; sokongan API mungkin menyusul jika versi API berasaskan tak segerak/tugasan pernah wujud.
Akses API memerlukan Basic, Lite, Pro, atau Team. Jika akaun beralih ke Percuma — sama ada dibatalkan, atau langganan tamat — kunci sedia ada akan berhenti berfungsi serta-merta. Ia akan berfungsi semula secara automatik jika akaun kembali ke pelan berbayar; anda tidak perlu menjana yang baharu.
Pada awal setiap bulan kalendar, bukan pada tarikh bil anda.
Buat masa ini tidak — setiap permintaan dikira daripada peruntukan bulanan sebenar anda. Gunakan fail kecil semasa mengintegrasikan untuk menjimatkannya.
Sehingga had konkurensi pelan anda (lihat Pelan & had di atas) — dikongsi dengan sebarang penukaran yang anda juga jalankan di laman web pada masa yang sama, bukan peruntukan berasingan khusus API.
Untuk document-compress, ya — ia tidak akan sekali-kali memulangkan PDF yang lebih besar daripada yang dimuat naik; jika pemampatan semula Ghostscript tidak membantu, anda akan menerima semula fail asal tanpa perubahan (X-Saved-Percent akan menunjukkan 0). Untuk image-compress, target_percent ialah sasaran yang cuba dicapai oleh pengekod, bukan jaminan mutlak — sumber yang sudah sangat termampat mungkin tidak dapat dikecilkan lagi dengan banyak.
Sedia untuk bermula?
Jana kunci dan buat permintaan pertama anda dalam masa kurang seminit.
Dapatkan kunci API anda