आपके अपने प्रोडक्ट के लिए लाइव अनुवाद
32 भाषाओं में लाइव वॉइस अनुवाद, टेक्स्ट अनुवाद, स्पीच और वीडियो के लिए एक API। प्रीपेड क्रेडिट, सिर्फ़ इस्तेमाल का भुगतान, कोई मासिक शुल्क नहीं।
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"
}कितना ख़र्च होता है
हर कॉल का भुगतान आपके प्रीपेड बैलेंस से होता है। हमारी तरफ़ से फ़ेल हुई कॉल का शुल्क नहीं लिया जाता।
ऑथेंटिकेशन
हर रिक्वेस्ट Authorization हेडर में आपकी API कुंजी लेकर जाती है। कुंजियाँ आपके डैशबोर्ड में बनाई और रद्द की जाती हैं; हर कुंजी एक ही बैलेंस ख़र्च करती है।
- sponkly.com पर मुफ़्त साइन अप करें और डैशबोर्ड → डेवलपर API खोलें।
- क्रेडिट जोड़ें ($10 से) और API कुंजी बनाएँ।
- Authorization: Bearer <your key> के साथ https://api.sponkly.com/v1 पर रिक्वेस्ट भेजें।
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} | अनुवादित आवाज़ का एक हिस्सा: दिए गए रेट पर 16-बिट मोनो PCM, base64 में। हिस्सों को एक के बाद एक चलाएँ। |
{"t":"problem","text":"noMinutes"} | आपका बैलेंस ख़त्म हो गया; सेशन बंद हो जाता है। |
पैरामीटर: source और target (भाषा कोड), सिर्फ़ कैप्शन के लिए voice=0 (आधी कीमत)। ऑडियो रियल टाइम में भेजें (इससे तेज़ भेजना अस्वीकार होता है)। हर खाते में एक साथ 10 सेशन तक, हर एक 2 घंटे तक। अनुवादित स्पीच के हर सेकंड का भुगतान होता है; ख़ामोशी और संगीत मुफ़्त हैं।
/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 सेशन तक, हर एक 2 घंटे तक, ऑडियो रियल टाइम में।
- वीडियो: 5 मिनट और 4 GB तक, एक साथ 3 बन सकते हैं; नतीजे 7 दिन रखे जाते हैं।
- हर कुंजी की सीमा प्रति मिनट: 300 अनुवाद, 120 स्पीच, 60 ट्रांसक्रिप्शन और 20 नए वीडियो।
- 32 भाषाएँ: अंग्रेज़ी, तुर्की, जर्मन, फ़्रेंच, स्पेनिश, इतालवी, पुर्तगाली, रूसी, जापानी, कोरियाई, चीनी, अरबी, हिंदी, डच, पोलिश, स्वीडिश, नॉर्वेजियन, डेनिश, फ़िनिश, ग्रीक, चेक, रोमानियाई, हंगेरियन, यूक्रेनी, हिब्रू, थाई, वियतनामी, इंडोनेशियाई, मलय, एस्टोनियाई, फ़ारसी और कैटलन।
बिलिंग
- प्रीपेड: $10 से कार्ड से क्रेडिट जोड़ें; हर कॉल आपके बैलेंस से कटती है।
- कार्ड प्रोसेसिंग शुल्क चेकआउट पर दिखाया और जोड़ा जाता है, ताकि आपका पूरा क्रेडिट आपके इस्तेमाल के लिए रहे।
- क्रेडिट ख़रीदने के बाद 12 महीने तक इस्तेमाल किया जा सकता है। यह रिफ़ंड नहीं होता।
- हमारी तरफ़ से फ़ेल हुई कॉल का शुल्क नहीं लिया जाता, और फ़ेल हुए वीडियो का पैसा लौटा दिया जाता है।
- बैलेंस कम होने पर हम आपको ईमेल करते हैं; शून्य होने पर क्रेडिट जोड़ने तक कॉल 402 के साथ अस्वीकार होती हैं।