ترجمة فورية لمنتجك
واجهة 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 والمقبس المباشر: نص فارغ).
- اجمعها بهذا الترتيب مفصولة بنقاط: الطابع الزمني، والطريقة، والمسار مع سلسلة الاستعلام، وتجزئة نص الطلب.
- احسب HMAC-SHA256 لهذا النص باستخدام سرّ التوقيع، بصيغة hex بأحرف صغيرة.
- أرسله في 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 للكلام المباشر: أرسل الصوت أثناء التحدث واستلم ترجمة نصية، وصوتًا مترجمًا إذا طلبته. تُترجم 13 لغة رئيسية بواسطة نموذج كلام فوري بتأخير يقارب 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 حتى تضيف رصيدًا.