TransConvert API
Görselleri ve belgeleri tek bir basit HTTP uç noktasıyla programatik olarak dönüştürün.
curl -X POST \ .../api/v1/convert.php \ -H "Authorization: Bearer ..." \ -F "category=image" \ -F "target=PNG" \ -F "file=@photo.jpg" \ -o converted.png
Hızlı başlangıç
Üç adımda sıfırdan ilk dönüştürülmüş dosyanıza.
Basic, Lite, Pro veya Team'e kaydolun (ya da mevcut hesabınızı yükseltin), ardından hesap sayfanızdan bir anahtar oluşturun — istediğiniz zaman geri dönüp tekrar görüntüleyebilirsiniz.
Dosyanızı, Authorization başlığında anahtarınız ve category + target ayarlanmış şekilde, aşağıdaki uç noktaya multipart/form-data olarak POST edin.
200 yanıtı, dönüştürülmüş dosyanın ham baytlarıdır — yanıt gövdesini doğrudan kaydedin. Başka her şey, neyin yanlış gittiğini açıklayan bir JSON hatasıdır.
Kimlik doğrulama
Her istek, Authorization başlığında Bearer token olarak gönderilen bir API anahtarı gerektirir.
Authorization: Bearer tc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Basic, Lite, Pro ve Team planlarında kullanılabilir. Hesabınızdan bir anahtar oluşturun →
Anahtarınızı test edin
Gerçek bir entegrasyon kodu yazmadan önce bir anahtarın çalıştığını doğrulamanın hızlı bir yolu — bu tek başına hiçbir şeyi dönüştürmez (ekli dosya yok), ama 401 yerine 400 no_file alınması anahtarın geçerli olduğunu doğrular.
curl -X POST -H "Authorization: Bearer tc_live_your_key_here" -F "category=image" https://transconvert.com/api/v1/convert.php
Uç nokta
Tek bir uç nokta tüm dönüştürmeleri karşılar. Dosyanız ve aşağıdaki alanlarla birlikte bir multipart/form-data POST isteği gönderin.
https://transconvert.com/api/v1/convert.php
Parametreler
| Field | Description |
|---|---|
Authorization | Zorunlu. "Bearer tc_live_...". |
category | Zorunlu. "image" veya "document" — dönüştürme yerine sıkıştırma için aşağıdaki Sıkıştırma bölümüne bakın. |
target | Zorunlu. Çıktı format kodu, ör. "PNG", "DOCX" — aşağıdaki Desteklenen formatlar bölümüne bakın. |
file | Zorunlu. Dönüştürülecek dosya (multipart yükleme). |
pdf_mode | İsteğe bağlı, yalnızca image kategorisi. "pages" (varsayılan, her sayfayı görsele dönüştürür) veya "extract" (gömülü görselleri olduğu gibi çıkarır) — yalnızca kaynak bir PDF olduğunda geçerlidir. |
pdf_pages | İsteğe bağlı, yalnızca image kategorisi. "all" (varsayılan) veya "first". |
pdf_quality | İsteğe bağlı, yalnızca image kategorisi. "normal" (varsayılan, 150 DPI) veya "high" (300 DPI). |
Sık kullanılan dönüştürmeler
Popüler dosya çiftleri için hızlı bir referans — aynı uç nokta, yalnızca farklı bir category/target kombinasyonuyla hepsini karşılar.
| 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 |
Yanıt
Başarılı olduğunda (200): dönüştürülmüş dosyanın ham baytları, buna uygun Content-Type ve Content-Disposition başlıklarıyla birlikte döner. Başarısız olduğunda: {"error": {"code": "...", "message": "..."}} şeklinde bir JSON gövdesi, eşleşen bir HTTP durum koduyla birlikte döner — aşağıdaki Hatalar bölümüne bakın.
| Header | Value |
|---|---|
Content-Type | Dönüştürülmüş dosyanın gerçek MIME türü (ör. image/png, application/pdf). |
Content-Disposition | attachment; filename="..." — herhangi bir dosya indirmesinde olduğu gibi önerilen bir dosya adı. |
Content-Length | Yanıt gövdesinin bayt cinsinden boyutu. |
Sıkıştırma
Bir dosyayı formatını değiştirmeden küçültün — girişte ve çıkışta aynı format. Dönüştürmeden ayrı, kendi seçenekleri aşağıda verilen iki kategori: image-compress ve document-compress.
image-compress
Girişte ve çıkışta aynı format (JPG/PNG/WEBP/GIF) — target_percent, sonucun orijinale göre ne kadar küçük olmayı hedeflediğidir, sabit bir kalite ayarı değildir.
| Field | Description |
|---|---|
category | "image-compress" olarak ayarlayın. |
target_percent | İsteğe bağlı, 1–100 (varsayılan 60). Orijinalin yaklaşık yüzdesi olarak hedef boyut — küçük sayılar daha sert sıkıştırır. |
file | Zorunlu. JPG, PNG, WEBP veya 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
Girişte ve çıkışta PDF, Ghostscript'in kendi yeniden sıkıştırmasıyla — yüklenenden daha büyük bir dosya asla döndürmez (yeniden sıkıştırma işe yaramazsa orijinale geri döner).
| Field | Description |
|---|---|
category | "document-compress" olarak ayarlayın. |
level | İsteğe bağlı: "low", "medium" (varsayılan), "high" veya "none". Daha yüksek sıkıştırma, özellikle gömülü görsellerde/taramalarda görsel kaliteden ödün verir. |
grayscale | İsteğe bağlı. Gri tonlamaya da dönüştürmek için "1"; tam renk için boş bırakın. |
file | Zorunlu. Açık/şifre korumalı olmayan bir PDF (öyleyse önce web sitesindeki PDF Kilidini Aç aracını kullanın). |
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 | Sıkıştırmadan önce yüklenen dosyanın bayt cinsinden boyutu. |
X-Saved-Percent | Sonucun orijinalden yaklaşık ne kadar küçük olduğu, tam sayı yüzde olarak (0 olabilir). |
Video ve ses (asenkron)
Video ve ses dönüştürmeleri dakikalarca sürebilir — tek bir senkron isteği bu kadar uzun süre açık tutmak pratik değildir, bu yüzden yukarıdaki uç nokta yerine gönder-sonra-sorgula akışı kullanılır. Bir dosya gönderin, hemen bir job_id alın, ardından işiniz tamamlanana kadar durumunu sorgulayın.
Bir iş gönderin
Ana uç noktayla aynı multipart POST biçimi, farklı bir URL'de.
https://transconvert.com/api/v1/convert-async.php
| Field | Description |
|---|---|
Authorization | Zorunlu. "Bearer tc_live_...". |
category | "video" veya "audio". |
target | Zorunlu — ör. "MP4", "MOV", "MP3", "WAV". |
file | Zorunlu. Dönüştürülecek dosya (multipart yükleme). |
webhook_url | İsteğe bağlı. İş tamamlandığında sonucu sadece job-status.php'yi yoklamak yerine POST edilecek http(s) URL'si. Genel (public) bir adrese çözümlenmelidir. |
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"
Yanıt (202 Accepted)
{ "job_id": "job_242e1555d78d166807aa56502f15d118", "status": "queued" }
Durumu sorgulayın
Aldığınız job_id ile bunu birkaç saniyede bir sorgulayın. "status" alanı queued, processing, completed veya failed değerlerinden biridir.
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'lar (isteğe bağlı)
Gönderim sırasında bir webhook_url verdiyseniz, iş bittiğinde — başarılı ya da başarısız — bu aynı JSON gövdesini oraya bir kez POST ederiz; uç noktanız yanıt vermezse birkaç kez tekrar deneriz. job-status.php yine de bir yedek olarak çalışmaya devam eder.
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" }
Sonucu indirin
"status" "completed" olduğunda yanıt bir download_url içerir — aynı durum URL'sine &download=1 eklenmiş hali. Bu URL'e istek atmak, sayfadaki diğer tüm uç noktalarla aynı başlıklarla dönüştürülmüş dosyanın ham baytlarını akıtır. Sonuç, indirildiği anda silinir; hiç indirilmezse kısa bir saklama süresinin ardından otomatik olarak silinir.
scheduleİş sonuçları indirildikten hemen sonra silinir; hiç indirilmezse kısa bir saklama süresinin ardından otomatik olarak silinir — dosyanızı zamanında indirin.
Örnekler
Aynı istek dört dilde — kendi teknoloji yığınınıza uyanı seçin. Her biri yerel bir photo.jpg dosyasını PNG'ye dönüştürüp sonucu kaydeder.
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()); } }
Hatalar
Her başarısızlık, kodunuzun dallanabileceği bir "code" ile birlikte insan tarafından okunabilir bir "message" içeren bir JSON hata zarfı döndürür. Bazı hatalar ek alanlar içerir (örneğin quota_exceeded, "limit" ve "used" içerir).
{
"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 | Authorization başlığı gönderilmedi. |
401 invalid_key | Anahtar mevcut değil veya iptal edilmiş. |
403 account_suspended | Bu anahtara sahip hesap askıya alınmış. |
403 plan_required | Hesap Free planında — API erişimi Basic, Lite, Pro veya Team gerektirir. |
400 invalid_category | "category", "image" veya "document" değildi. |
400 missing_target | "target" boştu. |
400 no_file | Dosya gönderilmedi veya yükleme başarısız oldu — alanın adı "file" olmalı. |
413 file_too_large | Dosya, planınızın izin verdiği en büyük yükleme boyutunu aşıyor. |
429 quota_exceeded | Planın aylık dönüştürme dakikası kotası tükendi. Bir sonraki takvim ayının başında sıfırlanır. |
429 concurrency_limit | Bu hesap için aynı anda çalışan çok fazla dönüştürme var (web sitesiyle paylaşılır) — birinin bitmesini bekleyip tekrar deneyin. |
400/415/422/500/503 conversion_failed | Dosyanın kendisi dönüştürülemedi — "message" nedenini açıklar. Durum kodu nedene göre değişir: 400/415/422, dosyanın veya hedefin kaç kez denerseniz deneyin çalışmayacağı anlamına gelir; 500/503 sunucu tarafında bir sorun olduğunu gösterir, özellikle 503 için kısa bir yeniden deneme mantıklıdır. |
405 method_not_allowed | Yanlış HTTP metodu — bu uç nokta yalnızca POST kabul eder. |
400 invalid_target | "target", bu kategori için desteklenen bir çıktı formatı değil. |
404 job_not_found | Bu hesap için bu kimlikte bir iş yok (başka bir hesabın job_id'si için de aynı yanıt döner — bir işin var olup olmadığı asla ifşa edilmez). |
410 result_gone | İş tamamlandı, ancak sonucu o zamandan beri silindi (sonuçlar indirildikten hemen sonra veya hiç indirilmezse kısa bir saklama süresinin ardından otomatik olarak silinir). |
500 storage_failed | Sunucu, arka planda işlenmek üzere yüklemeyi kaydedemedi. Tekrar denemek güvenlidir. |
Hataları ve yeniden denemeleri yönetme
JSON'daki "code" alanına göre dallanın, "message" metnine göre değil — ifade zamanla değişebilir, kod değişmez. concurrency_limit, birkaç saniye sonra kısa bir yeniden deneme için uygundur (devam eden dönüştürmelerinizden biri bittiği anda ortadan kalkar); quota_exceeded gelecek aya kadar kendiliğinden çözülmez, bu yüzden bir döngüde tekrar tekrar denemeyin. conversion_failed, HTTP durumunun hâlâ önemli olduğu tek koddur: 503 kısa bir yeniden denemeye değer geçici bir sunucu tarafı sorunudur, 400/415/422/500 ise o dosya/hedef kombinasyonunun kaç kez yeniden gönderirseniz gönderin başarılı olmayacağı anlamına gelir. Yüklemeden önce bir dosyanın boyutunu istemci tarafında kontrol etmek, kesin bir file_too_large için isteği boşa harcamayı önler.
Planlar ve limitler
API, web sitesinde zaten kullandığınız planla aynı limitleri paylaşır — ayrıca yapılandırılacak bir şey yoktur.
Basic
bolt2000 dönüştürme dakikası / ay
upload_file2 GB kadar dosyalar
sync_altAynı anda 50 istek
speed30 istek/dakika
Lite
bolt3000 dönüştürme dakikası / ay
upload_file4 GB kadar dosyalar
sync_altAynı anda 100 istek
speed60 istek/dakika
Pro
bolt5000 dönüştürme dakikası / ay
upload_file10 GB kadar dosyalar
sync_altAynı anda sınırsız istek
speed120 istek/dakika
Team
bolt10000 dönüştürme dakikası / ay
upload_file20 GB kadar dosyalar
sync_altAynı anda sınırsız istek
speed240 istek/dakika
tollKullanıyorsa takımın aylık kredi havuzuyla paylaşılır
Dakika başına bir sınır uygulandığında her yanıt X-RateLimit-Limit ve X-RateLimit-Remaining başlıklarını içerir; 429 yanıtında ayrıca Retry-After (saniye) de bulunur — sınıra çarpmadan önce yavaşlamak için bunları kullanın.
Desteklenen formatlar
Web sitesinin kullandığı ile tamamen aynı dönüştürme motoru — hiçbir şey yalnızca API'ye veya yalnızca web sitesine özel değildir.
Kaynak olarak kabul edilir:
JPG, PNG, GIF, WEBP, BMP, AVIF, PDF, PSD, TIFF, EPS, HEIC
Hedef olarak kullanılabilir:
JPG, PNG, GIF, WEBP, BMP, AVIF, PDF, ICO, PSD, TIFF, EPS
Kaynak olarak kabul edilir:
PDF, DOCX, DOC, PPTX, PPT, XLSX, XLS, RTF, ODT, ODP, ODS, HTML
Hedef olarak kullanılabilir:
PDF, DOCX, DOC, PPTX, PPT, XLSX, XLS, RTF, ODT, ODP, ODS
Kaynak ve hedef (girişte ve çıkışta aynı format):
JPG, PNG, WEBP, GIF
Kaynak ve hedef (girişte ve çıkışta aynı format):
Kaynak ve hedef (girişte ve çıkışta aynı format):
MP4, MOV, AVI, MKV, WEBM
Kaynak ve hedef (girişte ve çıkışta aynı format):
MP3, WAV, OGG, AAC, FLAC, M4A, WMA, OPUS, AIFF, AMR, AU, CAF, AC3, DTS, GSM, IRCAM, MP2, TTA, VOC, W64, WV, SPX, RM
infoVideo ve ses — hem dönüştürme hem sıkıştırma — şimdilik yalnızca web sitesinde kullanılabilir: eş zamanlı bir HTTP çağrısı, birkaç dakika sürebilen bir iş için uygun değildir.
Sık sorulan sorular
Henüz değil — bu dönüştürmeler birkaç dakika sürebilir, bu da tek bir eş zamanlı HTTP isteğine pek uymaz. Bugün web sitesinde kullanılabilirler; API'nin async/iş tabanlı bir sürümü olursa API desteği de gelebilir.
API erişimi Basic, Lite, Pro veya Team gerektirir. Hesap Free'ye geçerse — iptal nedeniyle veya abonelik sona erdiği için — mevcut anahtarlar hemen çalışmayı durdurur. Hesap tekrar ücretli bir plana geçtiğinde otomatik olarak yeniden çalışmaya başlarlar; yeni bir tane oluşturmanız gerekmez.
Faturalandırma tarihinizde değil, her takvim ayının başında.
Şu anda yok — her istek gerçek aylık kotanızdan düşer. Entegrasyon yaparken kotanızı korumak için küçük dosyalar kullanın.
Planınızın eşzamanlılık limitine kadar (yukarıdaki Planlar ve limitler bölümüne bakın) — aynı anda web sitesinde de çalıştırdığınız dönüştürmelerle paylaşılır, ayrı bir yalnızca-API kotası değildir.
document-compress için evet — yüklenenden daha büyük bir PDF asla döndürmez; Ghostscript'in yeniden sıkıştırması işe yaramadıysa orijinali değişmeden geri alırsınız (X-Saved-Percent 0 okur). image-compress için ise target_percent, kodlayıcının hedeflediği bir değerdir, kesin bir garanti değildir — zaten ağır sıkıştırılmış bir kaynak daha fazla küçülmeyebilir.
Başlamaya hazır mısınız?
Bir anahtar oluşturun ve bir dakikadan kısa sürede ilk isteğinizi gönderin.
API anahtarınızı alın