Terjemahan langsung untuk produk Anda sendiri
Satu API untuk terjemahan suara langsung, terjemahan teks, suara, dan video dalam 32 bahasa. Kredit prabayar, bayar hanya yang Anda pakai, tanpa biaya bulanan.
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"
}Biayanya
Setiap panggilan dibayar dari saldo prabayar Anda. Panggilan yang gagal karena pihak kami tidak dikenai biaya.
Autentikasi
Setiap permintaan menyertakan kunci API Anda di header Authorization. Kunci dibuat dan dicabut di dasbor; semuanya memakai saldo yang sama.
- Daftar gratis di sponkly.com dan buka Dasbor → API Pengembang.
- Tambah kredit (mulai $10) dan buat kunci API.
- Kirim permintaan ke https://api.sponkly.com/v1 dengan Authorization: Bearer <your key>.
Base URL: https://api.sponkly.com/v1
Authorization: Bearer spk_…Permintaan bertanda tangan
Setiap kunci API dilengkapi rahasia penandatanganan. Jika Anda menandatangani permintaan dengannya, kunci curian saja tidak berguna, permintaan tidak bisa diubah di tengah jalan, dan permintaan yang sama tidak bisa dikirim dua kali. Aktifkan "Wajibkan permintaan bertanda tangan" untuk kunci tersebut di dasbor, dan setiap permintaan tanpa tanda tangan akan ditolak.
- Ambil waktu saat ini dalam detik Unix dan SHA-256 dari body persis yang Anda kirim (untuk unggahan file: byte file; untuk GET dan socket live: body kosong).
- Gabungkan dengan titik sebagai pemisah, berurutan: timestamp, metode, path beserta query string, dan hash body.
- Buat HMAC-SHA256 dari teks itu dengan rahasia penandatanganan Anda, dalam hex huruf kecil.
- Kirim sebagai X-Sponkly-Signature: v1=<signature>, dengan waktunya sebagai X-Sponkly-Timestamp. Satu tanda tangan berlaku selama 5 menit dan untuk satu permintaan saja.
- Mengirim permintaan yang sama dua kali dalam satu detik (coba ulang cepat atau polling)? Berikan waktu dalam milidetik; itu juga diterima dan membuat setiap tanda tangan tetap unik.
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" }));Jaga keamanan kunci Anda
- Panggil API dari server Anda. Jangan pernah menaruh kunci atau rahasia penandatanganan di halaman web, aplikasi seluler, atau repositori publik.
- Wajibkan permintaan bertanda tangan untuk setiap kunci di produksi.
- Daftarkan alamat server Anda di alamat yang diizinkan pada kunci, agar kunci tidak berfungsi dari tempat lain.
- Tetapkan batas pengeluaran harian per kunci, agar kesalahan atau kebocoran hanya menimbulkan biaya terbatas.
- Gunakan satu kunci per aplikasi atau lingkungan, dan cabut kunci begitu Anda menduga kunci itu bocor. Anda juga bisa membuat rahasia penandatanganan baru kapan saja.
- Kunci atau tanda tangan yang salah berulang kali dari satu alamat akan memblokir alamat itu selama 15 menit.
/v1/translateTerjemahan teks
Menerjemahkan satu teks atau daftar hingga 50 teks ke salah satu dari 32 bahasa. Kosongkan bahasa sumber agar terdeteksi otomatis.
# 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"])Field: text (string atau array), target (kode bahasa), source (opsional), context (opsional, hingga 1.000 karakter yang menjelaskan isi teks). Anda membayar per karakter yang dikirim.
wss://api.sponkly.com/v1/live?source=en&target=trTerjemahan suara langsung
WebSocket untuk ucapan langsung: kirim audio saat diucapkan dan terima subtitle terjemahan serta, jika diminta, suara terjemahan. Tiga belas bahasa utama diterjemahkan oleh model suara realtime dengan jeda sekitar 1–2 detik; bahasa lainnya oleh pipeline streaming kami sendiri.
// 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.| Pesan dari server | Artinya |
|---|---|
{"t":"ready","engine":"openai|own"} | Sesi terbuka; engine menunjukkan jalur terjemahan yang melayani bahasa ini. |
{"t":"partial","text":"…"} | Ucapan yang sedang dikenali (masih bisa berubah). |
{"t":"cap","id","text","done"} | Satu baris terjemahan: ditampilkan sambil bertambah, final saat done bernilai true. |
{"t":"pcm","d":"<base64>","r":24000} | Potongan suara terjemahan: PCM mono 16-bit pada rate yang diberikan, dalam base64. Putar potongan-potongannya berurutan. |
{"t":"problem","text":"noMinutes"} | Saldo Anda habis; sesi ditutup. |
Parameter: source dan target (kode bahasa), voice=0 untuk subtitle saja (setengah harga). Kirim audio secara real time (lebih cepat akan ditolak). Hingga 10 sesi sekaligus per akun, masing-masing 2 jam. Anda membayar per detik ucapan yang diterjemahkan; hening dan musik gratis.
/v1/speechTeks ke suara
Mengubah teks menjadi ucapan alami dan mengembalikan file audionya langsung.
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.mp3Field: text (hingga 4.096 karakter), language, voice (female, male, neutral, atau alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav, atau opus), speed (0.5–2). Biayanya ada di header X-Sponkly-Cost-Usd.
/v1/transcribeSuara ke teks
Unggah file audio atau video (hingga 25 MB dan 60 menit); dapatkan teks dengan stempel waktu, serta terjemahannya jika diminta.
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/videosSubtitle dan sulih suara video
Kirim video hingga 5 menit dan terima kembali versi terjemahannya: subtitle ditanamkan, suara terjemahan, atau keduanya, plus file subtitle dalam kedua bahasa.
# 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" } } }Field: target, source (opsional), dub (true untuk suara terjemahan), subtitles (translated, original, both, atau none), content_type (video/mp4 atau video/quicktime), size_bytes, title (opsional). Anda membayar per detik video setelah durasinya diketahui. Hasil bisa diunduh selama 7 hari.
/v1/balance · /v1/usage · /v1/languagesSaldo, pemakaian, dan bahasa
Cek saldo dan kapan kredit tertua Anda kedaluwarsa, lihat daftar panggilan yang ditagih, dan dapatkan daftar bahasa serta harga terkini.
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 }Kesalahan
Kesalahan dikembalikan sebagai JSON dengan kode tetap dan pesan yang mudah dibaca.
{ "error": { "code": "insufficient_balance", "message": "…" } }| 400 | invalid_text · invalid_target · text_too_long … | Ada yang kurang atau tidak diizinkan dalam permintaan; pesannya menjelaskan apa. |
| 401 | missing_key · invalid_key | Tidak ada kunci API, atau kunci salah atau sudah dicabut. |
| 402 | insufficient_balance | Saldo Anda tidak cukup untuk panggilan ini. Tambah kredit di dasbor. |
| 429 | — | Terlalu banyak permintaan sekaligus. Tunggu sebentar lalu coba lagi. |
| 502 | translation_failed · speech_failed … | Gagal di pihak kami atau di penyedia. Anda tidak dikenai biaya; coba lagi. |
Batas
- Terjemahan teks: hingga 50 teks dan 20.000 karakter per permintaan, 5.000 per teks.
- Teks ke suara: hingga 4.096 karakter per permintaan.
- Suara ke teks: file hingga 25 MB dan 60 menit.
- Terjemahan langsung: hingga 10 sesi sekaligus per akun, masing-masing 2 jam, audio secara real time.
- Video: hingga 5 menit dan 4 GB, 3 diproses sekaligus; hasil disimpan 7 hari.
- Batas per kunci: 300 terjemahan, 120 suara, 60 transkripsi, dan 20 video baru per menit.
- 32 bahasa: Inggris, Turki, Jerman, Prancis, Spanyol, Italia, Portugis, Rusia, Jepang, Korea, Mandarin, Arab, Hindi, Belanda, Polandia, Swedia, Norwegia, Denmark, Finlandia, Yunani, Ceko, Rumania, Hongaria, Ukraina, Ibrani, Thai, Vietnam, Indonesia, Melayu, Estonia, Persia, dan Katalan.
Penagihan
- Prabayar: tambah kredit dengan kartu mulai $10; setiap panggilan diambil dari saldo Anda.
- Biaya pemrosesan kartu ditampilkan dan ditambahkan saat checkout, sehingga seluruh kredit bisa Anda pakai.
- Kredit bisa dipakai selama 12 bulan setelah dibeli. Kredit tidak dapat dikembalikan.
- Panggilan yang gagal karena pihak kami tidak dikenai biaya, dan dana untuk video yang gagal dikembalikan.
- Saat saldo menipis, kami mengirimi Anda email; saat nol, panggilan ditolak dengan 402 sampai Anda menambah kredit.