API Pengembang

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.

Terjemahan suara langsung
Kirim ucapan secara streaming, terima subtitle terjemahan dan suara terjemahan dalam hitungan detik.
US$0,10 per menit
Subtitle langsung
Streaming langsung yang sama, hanya subtitle terjemahan.
US$0,05 per menit
Terjemahan teks
Terjemahan alami yang memahami konteks untuk satu teks atau hingga 50.
US$10,00 per 1 juta karakter
Teks ke suara
Teks dibacakan dengan suara alami, dalam format MP3, WAV, atau Opus.
US$30,00 per 1 juta karakter
Suara ke teks
Audio atau video menjadi teks dengan stempel waktu, bisa sekaligus diterjemahkan.
US$0,01 per menit
Subtitle video
Video dikembalikan dengan subtitle terjemahan yang ditanamkan, plus file SRT.
US$0,20 per menit
Sulih suara video
Video dikembalikan dengan sulih suara dalam bahasa lain, dengan subtitle jika Anda mau.
US$0,50 per menit

Autentikasi

Setiap permintaan menyertakan kunci API Anda di header Authorization. Kunci dibuat dan dicabut di dasbor; semuanya memakai saldo yang sama.

  1. Daftar gratis di sponkly.com dan buka Dasbor → API Pengembang.
  2. Tambah kredit (mulai $10) dan buat kunci API.
  3. 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.

  1. 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).
  2. Gabungkan dengan titik sebagai pemisah, berurutan: timestamp, metode, path beserta query string, dan hash body.
  3. Buat HMAC-SHA256 dari teks itu dengan rahasia penandatanganan Anda, dalam hex huruf kecil.
  4. 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.
  5. 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.
POST/v1/translate

Terjemahan 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.

WSwss://api.sponkly.com/v1/live?source=en&target=tr

Terjemahan 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 serverArtinya
{"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.

POST/v1/speech

Teks 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.mp3

Field: 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.

POST/v1/transcribe

Suara 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" }
POST/v1/videos

Subtitle 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.

GET/v1/balance · /v1/usage · /v1/languages

Saldo, 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": "…" } }
400invalid_text · invalid_target · text_too_long …Ada yang kurang atau tidak diizinkan dalam permintaan; pesannya menjelaskan apa.
401missing_key · invalid_keyTidak ada kunci API, atau kunci salah atau sudah dicabut.
402insufficient_balanceSaldo Anda tidak cukup untuk panggilan ini. Tambah kredit di dasbor.
429—Terlalu banyak permintaan sekaligus. Tunggu sebentar lalu coba lagi.
502translation_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.