REST API · v1

Transify API Dokümantasyonu

Ses ve video transkripsiyon, çeviri ve AI analiz özelliklerini kendi uygulamanıza entegre edin.

Base URL: https://transify.averissoft.com/api/v1
API Key al →

🔑 Kimlik Doğrulama

Tüm API isteklerinde X-Api-Key header'ı zorunludur. API key'inizi profil sayfanızdan oluşturabilirsiniz.

Header
X-Api-Key: tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
⚠️
Güvenlik: API key'inizi asla client-side kod içine yazmayın. Sunucu tarafında environment variable olarak saklayın.
POST /api/v1@ep.Path

Dosya yükle, transkripsiyon başlat

Ses veya video dosyası yükleyerek transkripsiyon işlemi başlatır. İşlem asenkron çalışır — yanıtta dönen jobId ile durumu takip edin.

Parametreler
file File zorunlu Ses/video dosyası. MP3, MP4, WAV, M4A, OGG, MOV, MKV, AVI. Maks. 500 MB.
sourceLanguage string opsiyonel Kaynak dil ISO kodu (tr, en, de...) veya 'auto'. Varsayılan: auto
targetLanguage string opsiyonel Hedef dil ISO kodu. Varsayılan: tr
outputFormats string opsiyonel Virgülle ayrılmış formatlar: txt,pdf,srt,docx. Varsayılan: txt
webhookUrl string opsiyonel İş tamamlanınca POST isteği atılacak URL
İstek örneği
curl -X POST https://transify.averissoft.com/api/v1/transcribe \
  -H "X-Api-Key: tk_live_..." \
  -F "file=@toplanti.mp4" \
  -F "sourceLanguage=auto" \
  -F "targetLanguage=tr" \
  -F "outputFormats=txt,pdf,srt"
Yanıt (200 OK)
{
  "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "status": "queued",
  "statusUrl": "/api/v1/jobs/3fa85f64-...",
  "message": "İş kuyruğa alındı"
}
💡 Dosya yüklendikten sonra işlem arka planda çalışır. Sonucu /jobs/{id} endpoint'i ile takip edin veya webhookUrl belirtin.
GET /api/v1@ep.Path

İş durumunu sorgula

Transkripsiyon işinin anlık durumunu, ilerleme yüzdesini ve tamamlandıysa çıktı dosyalarını döner.

Parametreler
id uuid zorunlu Transcribe endpoint'inden dönen jobId
İstek örneği
curl https://transify.averissoft.com/api/v1/jobs/3fa85f64-... \
  -H "X-Api-Key: tk_live_..."
Yanıt (200 OK)
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "status": "completed",
  "progressPercent": 100,
  "fileName": "toplanti.mp4",
  "sourceLanguage": "en",
  "targetLanguage": "tr",
  "durationSeconds": 1847,
  "wordCount": 4820,
  "createdAt": "2026-05-24T14:32:00Z",
  "completedAt": "2026-05-24T14:35:12Z",
  "outputs": [
    {
      "format": "txt",
      "sizeBytes": 24580,
      "downloadUrl": "/api/v1/jobs/3fa85f64-.../download/txt"
    },
    {
      "format": "pdf",
      "sizeBytes": 184320,
      "downloadUrl": "/api/v1/jobs/3fa85f64-.../download/pdf"
    }
  ],
  "intelligence": {
    "summary": "Q2 pazarlama bütçesi görüşüldü...",
    "decisions": ["Lansman 15 Haziran'a alındı"],
    "actionItems": [
      {
        "owner": "Ayşe",
        "task": "Takvimi paylaş",
        "deadline": "22 Mayıs"
      }
    ],
    "keyTopics": ["pazarlama", "lansman", "bütçe"]
  }
}
💡 status alanı: queued → processing → completed veya failed
GET /api/v1@ep.Path

Çıktı dosyasını indir

Tamamlanmış bir işin çıktı dosyasını stream olarak indirir.

Parametreler
id uuid zorunlu Job ID
format string zorunlu txt · pdf · srt · vtt · docx
İstek örneği
curl -O "toplanti.pdf" \
  https://transify.averissoft.com/api/v1/jobs/3fa85f64-.../download/pdf \
  -H "X-Api-Key: tk_live_..."
Yanıt (200 OK)
HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="toplanti.pdf"

[Binary PDF içeriği]
💡 Dosyalar işlem tamamlandıktan 24-720 saat sonra otomatik silinir.
POST /api/v1@ep.Path

Metin çevir

Verilen metni belirtilen dile çevirir. GPT-4o kullanır.

Parametreler
text string zorunlu Çevrilecek metin. Maks. 50.000 karakter.
sourceLanguage string opsiyonel Kaynak dil ISO kodu veya 'auto'. Varsayılan: auto
targetLanguage string opsiyonel Hedef dil ISO kodu. Varsayılan: tr
İstek örneği
curl -X POST https://transify.averissoft.com/api/v1/translate \
  -H "X-Api-Key: tk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello, this is a test.",
    "sourceLanguage": "en",
    "targetLanguage": "tr"
  }'
Yanıt (200 OK)
{
  "originalText": "Hello, this is a test.",
  "translatedText": "Merhaba, bu bir testtir.",
  "sourceLanguage": "en",
  "targetLanguage": "tr",
  "characterCount": 22
}
POST /api/v1@ep.Path

Metin özetle (Meeting Intelligence)

Toplantı transkriptini analiz eder. Özet, kararlar, aksiyon maddeleri ve anahtar konuları çıkarır.

Parametreler
text string zorunlu Analiz edilecek transkript metni.
language string opsiyonel Metnin dili. Varsayılan: tr
İstek örneği
curl -X POST https://transify.averissoft.com/api/v1/summarize \
  -H "X-Api-Key: tk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Toplantı transkripti buraya...",
    "language": "tr"
  }'
Yanıt (200 OK)
{
  "summary": "Q2 pazarlama bütçesi görüşüldü...",
  "decisions": [
    "Lansman tarihi 15 Haziran olarak belirlendi",
    "Dijital kanallara %30 bütçe artışı onaylandı"
  ],
  "actionItems": [
    {
      "owner": "Ayşe",
      "task": "Lansman takvimini paylaş",
      "deadline": "22 Mayıs"
    }
  ],
  "keyTopics": ["pazarlama", "lansman", "bütçe", "Q2"],
  "sentiment": "positive"
}
GET /api/v1@ep.Path

Kullanım bilgisi

API key'inize ait bu ayki kullanım istatistiklerini döner.

İstek örneği
curl https://transify.averissoft.com/api/v1/usage \
  -H "X-Api-Key: tk_live_..."
Yanıt (200 OK)
{
  "plan": {
    "name": "Pro",
    "maxMinutes": 1500,
    "minutesUsed": 234,
    "minutesRemaining": 1266
  },
  "thisMonth": {
    "jobCount": 12,
    "minutesUsed": 234,
    "requestCount": 47
  },
  "apiKey": {
    "prefix": "tk_live_xxxx",
    "rateLimitPerHour": 100,
    "lastUsedAt": "2026-05-24T14:35:12Z"
  }
}

⚠️ Hata Kodları

Tüm hatalar aynı formatta döner:

{"error": "Hata açıklaması", "code": "HATA_KODU"}
HTTP Kod Açıklama
401 MISSING_API_KEY X-Api-Key header eksik
401 INVALID_API_KEY API key geçersiz, süresi dolmuş veya iptal edilmiş
402 PLAN_LIMIT_EXCEEDED Aylık dakika veya istek limiti aşıldı
400 FILE_REQUIRED Dosya gönderilmedi
400 FILE_TOO_LARGE Dosya 500 MB sınırını aşıyor
400 UNSUPPORTED_FORMAT Desteklenmeyen dosya formatı
400 TEXT_TOO_LONG Metin 50.000 karakter sınırını aşıyor
404 JOB_NOT_FOUND İş bulunamadı veya bu key'e ait değil
404 FILE_NOT_FOUND Çıktı dosyası bulunamadı (silinmiş olabilir)
429 RATE_LIMIT_EXCEEDED Saatlik istek limiti aşıldı
403 INSUFFICIENT_SCOPE API key bu endpoint için gerekli yetkiye sahip değil
429 KEY_QUOTA_EXCEEDED Bu key'in aylık dakika kotası doldu
400 INVALID_WEBHOOK_URL webhookUrl https olmalı ve genel bir adrese çözümlenmeli
500 INTERNAL_ERROR Sunucu hatası. Tekrar deneyin.

⏱ Rate Limiting

Her API key için saatlik istek limiti uygulanır. Limit aşılınca 429 hatası döner. Bir sonraki saatte sıfırlanır.

Plan İstek/saat Dakika/ay
Pro 100 istek 1.500 dk
Team 500 istek Sınırsız

🔔 Webhook'lar

/transcribe isteğinde webhookUrl verirseniz, iş bitince o adrese bir POST isteği gönderilir — durum sorgulamak için sürekli /jobs/{id} çağırmanız gerekmez. Başarısız işler de job.failed olayıyla bildirilir.

Adres https olmalı ve genel bir IP'ye çözümlenmelidir; iç ağa (127.x, 10.x, 192.168.x, 169.254.x) çözümlenen adresler INVALID_WEBHOOK_URL ile reddedilir.

Teslim edilemezse 30 saniye ve 5 dakika sonra tekrar denenir (toplam 3 istek). Sunucunuzun 10 saniye içinde 2xx dönmesi beklenir.

POST https://sizin-sunucunuz.com/transify-hook
Content-Type: application/json
X-Transify-Signature: sha256=4f1c...9ab2
X-Transify-Timestamp: 1786716717

{
  "event": "job.completed",
  "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "status": "Completed",
  "fileName": "toplanti.mp4",
  "durationSeconds": 1840.5,
  "completedAt": "2026-08-14T15:22:10Z",
  "error": null,
  "statusUrl": "/api/v1/jobs/3fa85f64-...",
  "outputs": [
    { "format": "TXT", "downloadUrl": "/api/v1/jobs/3fa85f64-.../download/txt", "sizeBytes": 18422 },
    { "format": "PDF", "downloadUrl": "/api/v1/jobs/3fa85f64-.../download/pdf", "sizeBytes": 204118 }
  ]
}

Her istek X-Transify-Signature başlığıyla imzalanır: gövdenin ve zaman damgasının HMAC-SHA256'sı. İmzalama sırrınız (whsec_...) API anahtarları sayfasında key'in yanında yazılıdır. İmzayı doğrulamadan gelen veriye güvenmeyin — aksi halde adresinizi bilen herkes size sahte "iş tamamlandı" bildirimi gönderebilir.

# Imzayi dogrulamadan gelen veriye guvenmeyin.
# Sir: /profile/api-keys sayfasinda key'in yaninda yazili (whsec_...)

import hmac, hashlib, time

def dogrula(govde: bytes, imza: str, timestamp: str, sir: str) -> bool:
    # 5 dakikadan eski istekleri reddet (replay korumasi)
    if abs(time.time() - int(timestamp)) > 300:
        return False

    beklenen = hmac.new(
        sir.encode(),
        f"{timestamp}.{govde.decode()}".encode(),
        hashlib.sha256,
    ).hexdigest()

    return hmac.compare_digest(f"sha256={beklenen}", imza)


# Flask ornegi
@app.post("/transify-hook")
def hook():
    ok = dogrula(
        request.get_data(),
        request.headers["X-Transify-Signature"],
        request.headers["X-Transify-Timestamp"],
        os.environ["TRANSIFY_WEBHOOK_SECRET"],
    )
    if not ok:
        return "", 401

    # 2xx donmezseniz 30 sn ve 5 dk sonra tekrar denenir.
    return "", 200

💻 Kod Örnekleri

Makine okunur API tanımı: /docs/openapi.json — Postman, Insomnia veya openapi-generator ile doğrudan içe aktarabilirsiniz.

# 1. Dosyayı yükle ve transkripsiyon başlat
curl -X POST https://transify.averissoft.com/api/v1/transcribe \
  -H "X-Api-Key: tk_live_BURAYA_KEY" \
  -F "file=@toplanti.mp4" \
  -F "sourceLanguage=auto" \
  -F "targetLanguage=tr" \
  -F "outputFormats=txt,pdf"

# Yanıt: {"jobId": "3fa85f64-..."}

# 2. İş durumunu kontrol et
curl https://transify.averissoft.com/api/v1/jobs/3fa85f64-... \
  -H "X-Api-Key: tk_live_BURAYA_KEY"

# 3. Tamamlandıysa dosyayı indir
curl -O toplanti.pdf \
  https://transify.averissoft.com/api/v1/jobs/3fa85f64-.../download/pdf \
  -H "X-Api-Key: tk_live_BURAYA_KEY"
import requests
import time

API_KEY = "tk_live_BURAYA_KEY"
BASE_URL = "https://transify.averissoft.com/api/v1"
HEADERS = {"X-Api-Key": API_KEY}

with open("toplanti.mp4", "rb") as f:
    response = requests.post(
        f"{BASE_URL}/transcribe",
        headers=HEADERS,
        files={"file": f},
        data={
            "sourceLanguage": "auto",
            "targetLanguage": "tr",
            "outputFormats": "txt,pdf"
        }
    )

job_id = response.json()["jobId"]
print(f"İş başladı: {job_id}")

while True:
    status = requests.get(
        f"{BASE_URL}/jobs/{job_id}",
        headers=HEADERS
    ).json()

    print(f"Durum: {status['status']} (%{status['progressPercent']})")

    if status["status"] == "completed":
        break
    elif status["status"] == "failed":
        raise Exception(status.get("errorMessage"))

    time.sleep(5)

pdf = requests.get(
    f"{BASE_URL}/jobs/{job_id}/download/pdf",
    headers=HEADERS
)
with open("sonuc.pdf", "wb") as f:
    f.write(pdf.content)

print("✓ PDF indirildi: sonuc.pdf")
const API_KEY = 'tk_live_BURAYA_KEY';
const BASE_URL = 'https://transify.averissoft.com/api/v1';

async function transcribe(filePath) {
  const form = new FormData();
  form.append('file', fs.createReadStream(filePath));
  form.append('sourceLanguage', 'auto');
  form.append('targetLanguage', 'tr');
  form.append('outputFormats', 'txt,pdf');

  const start = await fetch(`${BASE_URL}/transcribe`, {
    method: 'POST',
    headers: { 'X-Api-Key': API_KEY },
    body: form
  });
  const { jobId } = await start.json();

  while (true) {
    const res = await fetch(`${BASE_URL}/jobs/${jobId}`, {
      headers: { 'X-Api-Key': API_KEY }
    });
    const job = await res.json();

    console.log(`Durum: ${job.status} (%${job.progressPercent})`);

    if (job.status === 'completed') {
      console.log('Özet:', job.intelligence?.summary);
      return job;
    }
    if (job.status === 'failed') {
      throw new Error(job.errorMessage);
    }

    await new Promise(r => setTimeout(r, 5000));
  }
}

transcribe('toplanti.mp4').then(console.log);
using var http = new HttpClient();
http.DefaultRequestHeaders.Add(
    "X-Api-Key", "tk_live_BURAYA_KEY");

using var form = new MultipartFormDataContent();
using var file = File.OpenRead("toplanti.mp4");
form.Add(new StreamContent(file), "file", "toplanti.mp4");
form.Add(new StringContent("auto"), "sourceLanguage");
form.Add(new StringContent("tr"),   "targetLanguage");
form.Add(new StringContent("txt,pdf"), "outputFormats");

var startRes = await http.PostAsync(
    "https://transify.averissoft.com/api/v1/transcribe", form);
var start = await startRes.Content
    .ReadFromJsonAsync<JsonElement>();
var jobId = start.GetProperty("jobId").GetString();

while (true)
{
    var statusRes = await http.GetAsync(
        $"https://transify.averissoft.com/api/v1/jobs/{jobId}");
    var job = await statusRes.Content
        .ReadFromJsonAsync<JsonElement>();

    var status = job.GetProperty("status").GetString();
    Console.WriteLine($"Durum: {status}");

    if (status == "completed") break;
    if (status == "failed")
        throw new Exception(
            job.GetProperty("errorMessage").GetString());

    await Task.Delay(5000);
}

var pdf = await http.GetByteArrayAsync(
    $"https://transify.averissoft.com/api/v1/jobs/{jobId}/download/pdf");
await File.WriteAllBytesAsync("sonuc.pdf", pdf);
Console.WriteLine("✓ PDF indirildi");
🚀

Hemen başla

API key'ini al, ilk isteğini dakikalar içinde yap.