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
textstring
zorunlu
Çevrilecek metin. Maks. 50.000 karakter.
sourceLanguagestring
opsiyonel
Kaynak dil ISO kodu veya 'auto'. Varsayılan: auto
targetLanguagestring
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
textstring
zorunlu
Analiz edilecek transkript metni.
languagestring
opsiyonel
Metnin dili. Varsayılan: tr
403INSUFFICIENT_SCOPEAPI key bu endpoint için gerekli yetkiye sahip değil
429KEY_QUOTA_EXCEEDEDBu key'in aylık dakika kotası doldu
400INVALID_WEBHOOK_URLwebhookUrl https olmalı ve genel bir adrese çözümlenmeli
500INTERNAL_ERRORSunucu 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/saatDakika/ay
Pro100 istek1.500 dk
Team500 istekSı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.
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.
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.