תרגום חי למוצר שלכם
API אחד לתרגום קולי חי, תרגום טקסט, דיבור ווידאו ב-32 שפות. קרדיט ששולם מראש, משלמים רק על מה שמשתמשים, בלי תשלום חודשי.
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"
}כמה זה עולה
כל קריאה משולמת מהיתרה ששילמתם מראש. קריאה שנכשלת בצד שלנו אינה מחויבת.
אימות
כל בקשה נושאת את מפתח ה-API שלכם בכותרת Authorization. יוצרים ומבטלים מפתחות בלוח הבקרה; כולם מנצלים את אותה יתרה.
- הירשמו בחינם ב-sponkly.com ופתחו את לוח הבקרה ← API למפתחים.
- הוסיפו קרדיט (החל מ-$10) וצרו מפתח API.
- שלחו בקשות אל https://api.sponkly.com/v1 עם Authorization: Bearer <your key>.
Base URL: https://api.sponkly.com/v1
Authorization: Bearer spk_…בקשות חתומות
לכל מפתח API יש סוד חתימה. כשחותמים איתו על הבקשות, מפתח גנוב לבדו חסר תועלת, אי אפשר לשנות בקשה בדרך ואי אפשר לשלוח את אותה בקשה פעמיים. הפעילו את "דרישת בקשות חתומות" עבור המפתח בלוח הבקרה, וכל בקשה לא חתומה תידחה.
- קחו את השעה הנוכחית בשניות Unix ואת ה-SHA-256 של הגוף המדויק שאתם שולחים (בהעלאת קובץ: הבייטים של הקובץ; ב-GET וב-socket החי: גוף ריק).
- חברו אותם בסדר הזה, מופרדים בנקודות: חותמת זמן, מתודה, נתיב כולל מחרוזת השאילתה, וה-hash של הגוף.
- חשבו HMAC-SHA256 של הטקסט הזה עם סוד החתימה שלכם, בהקסדצימלי באותיות קטנות.
- שלחו אותו כ-X-Sponkly-Signature: v1=<signature>, ואת השעה כ-X-Sponkly-Timestamp. חתימה תקפה ל-5 דקות ולבקשה אחת בלבד.
- שולחים את אותה בקשה פעמיים בתוך שנייה אחת (ניסיון חוזר מהיר או תשאול)? ציינו את הזמן באלפיות שנייה; גם זה מתקבל ושומר על כל חתימה ייחודית.
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" }));שמרו על המפתחות שלכם
- קראו ל-API מהשרת שלכם. לעולם אל תשימו מפתח או סוד חתימה בדף אינטרנט, באפליקציה לנייד או במאגר ציבורי.
- דרשו בקשות חתומות לכל מפתח בסביבת הייצור.
- הוסיפו את כתובות השרתים שלכם לכתובות המורשות של המפתח, כך שהוא לא יעבוד משום מקום אחר.
- הגדירו מגבלת הוצאה יומית לכל מפתח, כך שטעות או דליפה יעלו סכום מוגבל בלבד.
- השתמשו במפתח אחד לכל אפליקציה או סביבה, ובטלו מפתח ברגע שאתם חושדים שהוא נחשף. אפשר גם ליצור סוד חתימה חדש בכל עת.
- מפתחות או חתימות שגויים שוב ושוב מכתובת אחת חוסמים את הכתובת ל-15 דקות.
/v1/translateתרגום טקסט
מתרגם טקסט אחד או רשימה של עד 50 לכל אחת מ-32 השפות. אם משמיטים את שפת המקור, היא מזוהה אוטומטית.
# 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"])שדות: text (מחרוזת או מערך), target (קוד שפה), source (אופציונלי), context (אופציונלי, עד 1,000 תווים שמסבירים על מה הטקסט). התשלום הוא לפי תו שנשלח.
wss://api.sponkly.com/v1/live?source=en&target=trתרגום קולי חי
WebSocket לדיבור חי: שולחים את האודיו בזמן הדיבור ומקבלים כתוביות מתורגמות, ואם מבקשים, גם קול מתורגם. שלוש עשרה שפות מרכזיות מתורגמות על ידי מודל דיבור בזמן אמת עם השהיה של כ-1–2 שניות; השאר על ידי מערכת הסטרימינג שלנו.
// 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.| הודעה מהשרת | מה היא אומרת |
|---|---|
{"t":"ready","engine":"openai|own"} | הסשן פתוח; engine מציין איזה מסלול תרגום משרת את השפה הזו. |
{"t":"partial","text":"…"} | הדיבור שמזוהה ברגע זה (הוא עוד עשוי להשתנות). |
{"t":"cap","id","text","done"} | שורה מתורגמת: מוצגת תוך כדי שהיא מתארכת, וסופית כש-done הוא true. |
{"t":"pcm","d":"<base64>","r":24000} | חלק מהקול המתורגם: PCM מונו 16 ביט בקצב הדגימה הנתון, ב-base64. יש לנגן את החלקים ברצף. |
{"t":"problem","text":"noMinutes"} | היתרה שלכם נגמרה; הסשן נסגר. |
פרמטרים: source ו-target (קודי שפה), voice=0 לכתוביות בלבד (חצי מחיר). שלחו את האודיו בזמן אמת (מהר יותר נדחה). עד 10 סשנים בו־זמנית לחשבון, שעתיים כל אחד. התשלום הוא לפי שנייה של דיבור מתורגם; שקט ומוזיקה בחינם.
/v1/speechטקסט לדיבור
הופך טקסט לדיבור טבעי ומחזיר את קובץ האודיו עצמו.
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שדות: text (עד 4,096 תווים), language, voice (female, male, neutral, או alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav או opus), speed (0.5–2). העלות מופיעה בכותרת X-Sponkly-Cost-Usd.
/v1/transcribeדיבור לטקסט
העלו קובץ אודיו או וידאו (עד 25 MB ו-60 דקות); תקבלו את הטקסט עם חותמות זמן, ואת התרגום שלו אם תבקשו.
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/videosכתוביות ודיבוב לסרטונים
שלחו סרטון של עד 5 דקות וקבלו אותו בחזרה מתורגם: עם כתוביות צרובות, עם קול מתורגם או עם שניהם, וגם קובצי כתוביות בשתי השפות.
# 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" } } }שדות: target, source (אופציונלי), dub (true לקול מתורגם), subtitles (translated, original, both או none), content_type (video/mp4 או video/quicktime), size_bytes, title (אופציונלי). התשלום הוא לפי שנייה של וידאו, ברגע שהאורך ידוע. התוצאות זמינות להורדה במשך 7 ימים.
/v1/balance · /v1/usage · /v1/languagesיתרה, שימוש ושפות
בדקו את היתרה ומתי פג תוקף הקרדיט הוותיק ביותר, הציגו את הקריאות שחויבו, וקבלו את השפות והמחירים הנוכחיים.
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 }שגיאות
שגיאות חוזרות כ-JSON עם קוד קבוע והודעה קריאה.
{ "error": { "code": "insufficient_balance", "message": "…" } }| 400 | invalid_text · invalid_target · text_too_long … | משהו בבקשה חסר או אינו מותר; ההודעה מפרטת מה. |
| 401 | missing_key · invalid_key | אין מפתח API, או שהמפתח שגוי או בוטל. |
| 402 | insufficient_balance | היתרה לא מכסה את הקריאה הזו. הוסיפו קרדיט בלוח הבקרה. |
| 429 | — | יותר מדי בקשות בבת אחת. המתינו רגע ונסו שוב. |
| 502 | translation_failed · speech_failed … | התקלה הייתה בצד שלנו או אצל ספק. לא חויבתם; נסו שוב. |
מגבלות
- תרגום טקסט: עד 50 טקסטים ו-20,000 תווים לבקשה, 5,000 לטקסט.
- טקסט לדיבור: עד 4,096 תווים לבקשה.
- דיבור לטקסט: קבצים של עד 25 MB ו-60 דקות.
- תרגום חי: עד 10 סשנים בו־זמנית לחשבון, שעתיים כל אחד, אודיו בזמן אמת.
- סרטונים: עד 5 דקות ו-4 GB, 3 בעיבוד בו־זמנית; התוצאות נשמרות 7 ימים.
- מגבלות לכל מפתח בדקה: 300 תרגומים, 120 הקראות, 60 תמלולים ו-20 סרטונים חדשים.
- 32 שפות: אנגלית, טורקית, גרמנית, צרפתית, ספרדית, איטלקית, פורטוגזית, רוסית, יפנית, קוריאנית, סינית, ערבית, הינדי, הולנדית, פולנית, שוודית, נורווגית, דנית, פינית, יוונית, צ׳כית, רומנית, הונגרית, אוקראינית, עברית, תאית, וייטנאמית, אינדונזית, מלאית, אסטונית, פרסית וקטלאנית.
חיוב
- תשלום מראש: מוסיפים קרדיט בכרטיס החל מ-$10; כל קריאה יורדת מהיתרה.
- עמלת עיבוד הכרטיס מוצגת ומתווספת בתשלום, כך שכל הקרדיט עומד לרשותכם.
- אפשר להשתמש בקרדיט במשך 12 חודשים מיום הרכישה. הוא אינו ניתן להחזר.
- קריאה שנכשלת בצד שלנו אינה מחויבת, וסרטון שנכשל מזוכה.
- כשהיתרה נמוכה אנחנו שולחים לכם אימייל; באפס, קריאות נדחות עם 402 עד שתוסיפו קרדיט.