Kendi ürününüz için canlı çeviri
32 dilde canlı sesli çeviri, metin çevirisi, metinden sese ve video için tek bir API. Ön ödemeli kredi; yalnızca kullandığınız kadar ödersiniz, aylık ücret yok.
curl https://api.sponkly.com/v1/translate \
-H "Authorization: Bearer $SPONKLY_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Merhaba dünya", "target": "en"}'
{
"translation": "Hello world",
"target": "en",
"characters": 13,
"cost_usd": "0.000130"
}Ücretler
Her çağrı ön ödemeli bakiyenizden ödenir. Bizden kaynaklanan bir nedenle başarısız olan çağrılar ücretlendirilmez.
Kimlik doğrulama
Her istek, API anahtarınızı Authorization başlığında taşır. Anahtarlar panelinizde oluşturulur ve iptal edilir; hepsi aynı bakiyeyi kullanır.
- sponkly.com'da ücretsiz kaydolun ve Panel → Geliştiriciler için API sayfasını açın.
- Kredi yükleyin ($10'dan başlayarak) ve bir API anahtarı oluşturun.
- İsteklerinizi Authorization: Bearer <your key> ile https://api.sponkly.com/v1 adresine gönderin.
Base URL: https://api.sponkly.com/v1
Authorization: Bearer spk_…İmzalı istekler
Her API anahtarı bir imza gizli anahtarıyla gelir. İsteklerinizi bununla imzaladığınızda çalınan bir anahtar tek başına işe yaramaz, bir istek yolda değiştirilemez ve aynı istek iki kez gönderilemez. Panelinizde anahtar için "İmzalı istekleri zorunlu kıl" seçeneğini açın; imzasız her istek reddedilir.
- Geçerli zamanı Unix saniyesi olarak ve gönderdiğiniz gövdenin birebir SHA-256 değerini alın (dosya yüklemede: dosyanın baytları; GET ve canlı soket için: boş gövde).
- Bunları şu sırayla, aralarına nokta koyarak birleştirin: zaman damgası, yöntem, sorgu dizesiyle birlikte yol ve gövde hash'i.
- Bu metnin HMAC-SHA256 değerini imza gizli anahtarınızla, küçük harfli hex olarak hesaplayın.
- Bunu X-Sponkly-Signature: v1=<signature> olarak, zamanı da X-Sponkly-Timestamp olarak gönderin. Bir imza 5 dakika ve tek bir istek için geçerlidir.
- Aynı isteği bir saniye içinde iki kez mi gönderiyorsunuz (hızlı bir yeniden deneme ya da sorgulama)? Zamanı milisaniye olarak verin; bu da kabul edilir ve her imzayı benzersiz tutar.
X-Sponkly-Timestamp: 1792693200
X-Sponkly-Signature: v1=hex( HMAC-SHA256( signing_secret,
"1792693200" + "." + "POST" + "." + "/v1/translate" + "." + hex(SHA-256(body)) ) )// Node.js 18+
import crypto from "node:crypto";
async function sponkly(method, path, body) {
const raw = body === undefined ? "" : JSON.stringify(body);
const ts = Math.floor(Date.now() / 1000).toString();
const hash = crypto.createHash("sha256").update(raw).digest("hex");
const sig = crypto.createHmac("sha256", process.env.SPONKLY_SIGNING_SECRET)
.update(`${ts}.${method}.${path}.${hash}`).digest("hex");
const res = await fetch("https://api.sponkly.com" + path, {
method,
headers: {
Authorization: `Bearer ${process.env.SPONKLY_KEY}`,
"Content-Type": "application/json",
"X-Sponkly-Timestamp": ts,
"X-Sponkly-Signature": `v1=${sig}`,
},
body: raw || undefined,
});
return res.json();
}
console.log(await sponkly("POST", "/v1/translate", { text: "Merhaba dünya", target: "en" }));Anahtarlarınızı güvende tutun
- API'yi sunucunuzdan çağırın. Bir anahtarı veya imza gizli anahtarını asla bir web sayfasına, mobil uygulamaya ya da herkese açık bir depoya koymayın.
- Canlı ortamdaki her anahtar için imzalı istekleri zorunlu kılın.
- Sunucularınızın adreslerini anahtarın izin verilen adreslerine ekleyin; böylece anahtar başka hiçbir yerden çalışmaz.
- Her anahtar için günlük harcama sınırı belirleyin; böylece bir hata ya da sızıntının maliyeti sınırlı kalır.
- Her uygulama veya ortam için ayrı bir anahtar kullanın ve açığa çıktığını düşündüğünüz anda anahtarı iptal edin. İstediğiniz zaman yeni bir imza gizli anahtarı da oluşturabilirsiniz.
- Bir adresten art arda gelen hatalı anahtar veya imzalar, o adresi 15 dakika boyunca engeller.
/v1/translateMetin çevirisi
Tek bir metni ya da en fazla 50 metinlik bir listeyi 32 dilden herhangi birine çevirir. Kaynak dili belirtmezseniz otomatik algılanır.
# One text, or up to 50: "text": ["Good morning", "Thank you"]
curl https://api.sponkly.com/v1/translate \
-H "Authorization: Bearer $SPONKLY_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Bugün hava çok güzel.", "target": "en", "source": "tr"}'// JavaScript (Node 18+, Deno, Bun)
const res = await fetch("https://api.sponkly.com/v1/translate", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SPONKLY_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ text: ["Good morning", "Thank you"], target: "de" }),
});
const { translations } = await res.json(); // [{ text: "Guten Morgen" }, { text: "Danke" }]# Python
import os, requests
r = requests.post("https://api.sponkly.com/v1/translate",
headers={"Authorization": f"Bearer {os.environ['SPONKLY_KEY']}"},
json={"text": "How are you?", "target": "ja", "context": "A message to a hotel guest"})
print(r.json()["translation"])Alanlar: text (dize veya dizi), target (dil kodu), source (isteğe bağlı), context (isteğe bağlı; metnin ne hakkında olduğunu anlatan en fazla 1.000 karakter). Gönderilen karakter başına ödersiniz.
wss://api.sponkly.com/v1/live?source=en&target=trCanlı sesli çeviri
Canlı konuşma için bir WebSocket: sesi konuşuldukça gönderin; çevrilmiş altyazıları ve isterseniz çevrilmiş sesi alın. On üç büyük dil, yaklaşık 1–2 saniye gecikmeyle gerçek zamanlı bir konuşma modeliyle çevrilir; diğerleri kendi akış altyapımızla.
// Node.js (npm i ws). Send 16 kHz mono 16-bit PCM in ~100 ms frames, in real time.
import WebSocket from "ws";
const ws = new WebSocket("wss://api.sponkly.com/v1/live?source=en&target=tr&voice=1", {
headers: { Authorization: `Bearer ${process.env.SPONKLY_KEY}` },
});
ws.on("message", (raw) => {
const e = JSON.parse(raw);
if (e.t === "cap" && e.done) console.log("caption:", e.text); // a translated line
if (e.t === "pcm") play(Buffer.from(e.d, "base64"), e.r); // translated voice, 24 kHz PCM
});
microphone.on("data", (frame) => ws.send(frame)); // binary frames
// Browsers cannot set headers: new WebSocket(url, ["sponkly-key", key]). Never put your key in a public page —
// open the socket from your server, or from an app only your own team uses.| Sunucudan gelen mesaj | Anlamı |
|---|---|
{"t":"ready","engine":"openai|own"} | Oturum açıldı; engine, bu dili hangi çeviri yolunun işlediğini belirtir. |
{"t":"partial","text":"…"} | Şu anda tanınan konuşma (hâlâ değişebilir). |
{"t":"cap","id","text","done"} | Çevrilmiş bir satır: uzadıkça gösterilir, done true olduğunda kesinleşir. |
{"t":"pcm","d":"<base64>","r":24000} | Çevrilmiş sesin bir parçası: belirtilen örnekleme hızında 16 bit mono PCM, base64. Parçaları arka arkaya çalın. |
{"t":"problem","text":"noMinutes"} | Bakiyeniz bitti; oturum kapanır. |
Parametreler: source ve target (dil kodları), yalnızca altyazı için voice=0 (yarı fiyat). Sesi gerçek zamanlı gönderin (daha hızlısı reddedilir). Hesap başına aynı anda en fazla 10 oturum, her biri 2 saat. Çevrilen konuşmanın saniyesi başına ödersiniz; sessizlik ve müzik ücretsizdir.
/v1/speechMetinden sese
Metni doğal konuşmaya dönüştürür ve ses dosyasının kendisini döndürür.
curl https://api.sponkly.com/v1/speech \
-H "Authorization: Bearer $SPONKLY_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Merhaba, hoş geldiniz.", "language": "tr", "voice": "female", "format": "mp3"}' \
--output welcome.mp3Alanlar: text (en fazla 4.096 karakter), language, voice (female, male, neutral ya da alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav veya opus), speed (0.5–2). Ücret X-Sponkly-Cost-Usd başlığında yer alır.
/v1/transcribeSesten metne
Bir ses veya video dosyası yükleyin (en fazla 25 MB ve 60 dakika); zaman damgalı metni ve isterseniz çevirisini alın.
curl https://api.sponkly.com/v1/transcribe \
-H "Authorization: Bearer $SPONKLY_KEY" \
-F [email protected] \
-F language=tr \
-F translate_to=en
{ "text": "…", "language": "tr", "duration_seconds": 182.4,
"segments": [{ "start": 0.0, "end": 4.2, "text": "…" }],
"translation": { "text": "…", "target": "en" }, "cost_usd": "0.030430" }/v1/videosVideo altyazısı ve seslendirme
En fazla 5 dakikalık bir video gönderin ve çevrilmiş olarak geri alın: videoya işlenmiş altyazılar, çevrilmiş ses ya da ikisi birden; ayrıca iki dilde altyazı dosyaları.
# 1. Ask for a video: dubbed into Turkish, with Turkish subtitles
curl https://api.sponkly.com/v1/videos -H "Authorization: Bearer $SPONKLY_KEY" -H "Content-Type: application/json" \
-d '{"target": "tr", "dub": true, "subtitles": "translated", "content_type": "video/mp4", "size_bytes": 48211022}'
# → { "id": "…", "upload": { "method": "PUT", "url": "https://…", "headers": { "Content-Type": "video/mp4" } } }
# 2. Upload the file to that link
curl -X PUT -H "Content-Type: video/mp4" --data-binary @talk.mp4 "<upload.url>"
# 3. Start it, then poll until "status": "ready"
curl -X POST https://api.sponkly.com/v1/videos/<id>/start -H "Authorization: Bearer $SPONKLY_KEY"
curl https://api.sponkly.com/v1/videos/<id> -H "Authorization: Bearer $SPONKLY_KEY"
# → { "status": "ready", "cost_usd": "0.500000",
# "result": { "video_url": "https://…", "subtitles": { "tr": "https://…srt", "en": "https://…srt" } } }Alanlar: target, source (isteğe bağlı), dub (çevrilmiş ses için true), subtitles (translated, original, both veya none), content_type (video/mp4 veya video/quicktime), size_bytes, title (isteğe bağlı). Videonun uzunluğu belli olduğunda saniyesi başına ödersiniz. Sonuçlar 7 gün boyunca indirilebilir.
/v1/balance · /v1/usage · /v1/languagesBakiye, kullanım ve diller
Bakiyenizi ve en eski kredinizin ne zaman sona ereceğini görün, ücretlendirilen çağrılarınızı listeleyin, dilleri ve güncel fiyatları alın.
curl https://api.sponkly.com/v1/balance -H "Authorization: Bearer $SPONKLY_KEY"
# → { "balance_usd": "48.213400", "next_expiry": "2027-10-22T09:12:00.000Z" }
curl "https://api.sponkly.com/v1/usage?limit=20" -H "Authorization: Bearer $SPONKLY_KEY"
# → { "data": [{ "product": "live", "units": 312.5, "unit": "second", "cost_usd": "0.520834", … }], "has_more": false }Hatalar
Hatalar, sabit bir kod ve okunabilir bir mesajla JSON olarak döner.
{ "error": { "code": "insufficient_balance", "message": "…" } }| 400 | invalid_text · invalid_target · text_too_long … | İstekte eksik ya da izin verilmeyen bir şey var; mesaj ne olduğunu belirtir. |
| 401 | missing_key · invalid_key | API anahtarı yok ya da anahtar hatalı veya iptal edilmiş. |
| 402 | insufficient_balance | Bakiyeniz bu çağrıyı karşılamıyor. Panelden kredi yükleyin. |
| 429 | — | Aynı anda çok fazla istek. Biraz bekleyip tekrar deneyin. |
| 502 | translation_failed · speech_failed … | Bizim tarafımızda ya da bir sağlayıcıda hata oluştu. Ücret alınmadı; tekrar deneyin. |
Sınırlar
- Metin çevirisi: istek başına en fazla 50 metin ve 20.000 karakter, metin başına 5.000 karakter.
- Metinden sese: istek başına en fazla 4.096 karakter.
- Sesten metne: en fazla 25 MB ve 60 dakikalık dosyalar.
- Canlı çeviri: hesap başına aynı anda en fazla 10 oturum, her biri 2 saat, ses gerçek zamanlı.
- Videolar: en fazla 5 dakika ve 4 GB, aynı anda 3 video hazırlanır; sonuçlar 7 gün saklanır.
- Anahtar başına dakikalık sınırlar: 300 çeviri, 120 metinden sese, 60 sesten metne ve 20 yeni video.
- 32 dil: İngilizce, Türkçe, Almanca, Fransızca, İspanyolca, İtalyanca, Portekizce, Rusça, Japonca, Korece, Çince, Arapça, Hintçe, Felemenkçe, Lehçe, İsveççe, Norveççe, Danca, Fince, Yunanca, Çekçe, Rumence, Macarca, Ukraynaca, İbranice, Tayca, Vietnamca, Endonezce, Malayca, Estonca, Farsça ve Katalanca.
Faturalandırma
- Ön ödemeli: $10'dan başlayarak kartla kredi yükleyin; her çağrı bakiyenizden düşülür.
- Kart işlem ücreti ödeme sırasında gösterilir ve eklenir; böylece kredinizin tamamını kullanabilirsiniz.
- Kredi, satın alındıktan sonra 12 ay boyunca kullanılabilir. İade edilmez.
- Bizden kaynaklanan bir nedenle başarısız olan çağrılar ücretlendirilmez; başarısız olan videoların ücreti iade edilir.
- Bakiyeniz azaldığında size e-posta göndeririz; sıfıra indiğinde, kredi yükleyene kadar çağrılar 402 ile reddedilir.