Élő fordítás a saját termékedbe
Egyetlen API élő hangfordításhoz, szövegfordításhoz, beszédhez és videóhoz 32 nyelven. Előre fizetett kredit, csak a használatért fizetsz, nincs havidíj.
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"
}Mennyibe kerül
Minden hívást az előre feltöltött egyenlegedből fizetsz. Ha egy hívás a mi oldalunkon hiúsul meg, nem számítunk fel érte díjat.
Hitelesítés
Minden kérés az Authorization fejlécben viszi az API-kulcsodat. A kulcsokat az irányítópulton hozhatod létre és vonhatod vissza; mindegyik ugyanazt az egyenleget használja.
- Regisztrálj ingyen a sponkly.com oldalon, és nyisd meg: Irányítópult → Fejlesztői API.
- Tölts fel kreditet ($10-tól), és hozz létre egy API-kulcsot.
- Küldd a kéréseket a https://api.sponkly.com/v1 címre ezzel: Authorization: Bearer <your key>.
Base URL: https://api.sponkly.com/v1
Authorization: Bearer spk_…Aláírt kérések
Minden API-kulcshoz tartozik egy aláírási titok. Ha ezzel írod alá a kéréseidet, egy ellopott kulcs önmagában használhatatlan, a kérést útközben nem lehet módosítani, és ugyanazt a kérést nem lehet kétszer elküldeni. Kapcsold be a kulcsnál az irányítópulton az „Aláírt kérések megkövetelése” beállítást, és minden aláíratlan kérést elutasítunk.
- Vedd az aktuális időt Unix-másodpercben és a pontosan elküldött törzs SHA-256 értékét (fájlfeltöltésnél a fájl bájtjait; GET-nél és az élő socketnél üres törzset).
- Fűzd össze őket pontokkal elválasztva ebben a sorrendben: időbélyeg, metódus, útvonal a lekérdezési karakterlánccal és a törzs hash-e.
- Készíts ebből a szövegből HMAC-SHA256-ot az aláírási titkoddal, kisbetűs hexadecimális formában.
- Küldd el X-Sponkly-Signature: v1=<signature> formában, az időt pedig X-Sponkly-Timestamp fejlécben. Egy aláírás 5 percig és egyetlen kérésre érvényes.
- Ugyanazt a kérést egy másodpercen belül kétszer küldi (gyors újrapróbálkozás vagy lekérdezés)? Adja meg az időt ezredmásodpercben; ezt is elfogadjuk, és minden aláírás egyedi marad.
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" }));Tartsd biztonságban a kulcsaidat
- Az API-t a szerveredről hívd. Soha ne tegyél kulcsot vagy aláírási titkot weboldalba, mobilalkalmazásba vagy nyilvános tárolóba.
- Éles környezetben minden kulcsnál követeld meg az aláírt kéréseket.
- Add meg a szervereid címét a kulcs engedélyezett címei között, így a kulcs máshonnan nem működik.
- Állíts be kulcsonként napi költési korlátot, így egy hiba vagy szivárgás csak korlátozott összegbe kerülhet.
- Alkalmazásonként vagy környezetenként használj egy kulcsot, és vond vissza azonnal, ha úgy gondolod, kiszivárgott. Új aláírási titkot is bármikor készíthetsz.
- Ha egy címről ismételten hibás kulcs vagy aláírás érkezik, azt a címet 15 percre kizárjuk.
/v1/translateSzövegfordítás
Egy szöveget vagy legfeljebb 50 szövegből álló listát fordít le a 32 nyelv bármelyikére. Ha kihagyod a forrásnyelvet, automatikusan felismeri.
# 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"])Mezők: text (karakterlánc vagy tömb), target (nyelvkód), source (nem kötelező), context (nem kötelező, legfeljebb 1000 karakter arról, miről szól a szöveg). Az elküldött karakterek után fizetsz.
wss://api.sponkly.com/v1/live?source=en&target=trÉlő hangfordítás
WebSocket élő beszédhez: küldd a hangot beszéd közben, és kapd meg a lefordított feliratot, kérésre pedig a lefordított hangot is. Tizenhárom nagy nyelvet egy valós idejű beszédmodell fordít körülbelül 1–2 másodperces késéssel, a többit a saját streamelő rendszerünk.
// 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.| Üzenet a szervertől | Mit jelent |
|---|---|
{"t":"ready","engine":"openai|own"} | A munkamenet megnyílt; az engine megmutatja, melyik fordítási út szolgálja ki ezt a nyelvet. |
{"t":"partial","text":"…"} | Az éppen felismert beszéd (még változhat). |
{"t":"cap","id","text","done"} | Egy lefordított sor: bővülés közben is látszik, és végleges, ha a done értéke true. |
{"t":"pcm","d":"<base64>","r":24000} | Egy darab a lefordított hangból: 16 bites mono PCM a megadott mintavételi frekvencián, base64-ben. Játszd le a darabokat közvetlenül egymás után. |
{"t":"problem","text":"noMinutes"} | Elfogyott az egyenleged; a munkamenet bezárul. |
Paraméterek: source és target (nyelvkódok), voice=0 csak feliratért (fél áron). A hangot valós időben küldd (a gyorsabbat elutasítjuk). Fiókonként legfeljebb 10 egyidejű munkamenet, egyenként 2 óra. A lefordított beszéd minden másodpercéért fizetsz; a csend és a zene ingyenes.
/v1/speechSzövegfelolvasás
Természetes beszéddé alakítja a szöveget, és magát a hangfájlt adja vissza.
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.mp3Mezők: text (legfeljebb 4096 karakter), language, voice (female, male, neutral vagy alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav vagy opus), speed (0.5–2). A költség az X-Sponkly-Cost-Usd fejlécben található.
/v1/transcribeBeszédátírás
Tölts fel egy hang- vagy videófájlt (legfeljebb 25 MB és 60 perc); megkapod a szöveget időbélyegekkel, és ha kéred, a fordítását is.
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/videosVideófelirat és szinkron
Küldj egy legfeljebb 5 perces videót, és lefordítva kapod vissza: beégetett felirattal, lefordított hanggal vagy mindkettővel, plusz feliratfájlokkal mindkét nyelven.
# 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" } } }Mezők: target, source (nem kötelező), dub (true a lefordított hanghoz), subtitles (translated, original, both vagy none), content_type (video/mp4 vagy video/quicktime), size_bytes, title (nem kötelező). A videó minden másodpercéért fizetsz, amint ismert a hossza. Az eredmények 7 napig letölthetők.
/v1/balance · /v1/usage · /v1/languagesEgyenleg, felhasználás és nyelvek
Nézd meg az egyenlegedet és azt, hogy mikor jár le a legrégebbi kredited, listázd a kiszámlázott hívásaidat, és kérd le a nyelveket és az aktuális árakat.
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 }Hibák
A hibák JSON-ként érkeznek, állandó kóddal és olvasható üzenettel.
{ "error": { "code": "insufficient_balance", "message": "…" } }| 400 | invalid_text · invalid_target · text_too_long … | A kérésből hiányzik valami, vagy valami nem megengedett; az üzenet megmondja, mi. |
| 401 | missing_key · invalid_key | Nincs API-kulcs, vagy a kulcs hibás vagy visszavont. |
| 402 | insufficient_balance | Az egyenleged nem fedezi ezt a hívást. Tölts fel kreditet az irányítópulton. |
| 429 | — | Túl sok kérés egyszerre. Várj egy kicsit, és próbáld újra. |
| 502 | translation_failed · speech_failed … | Hiba történt nálunk vagy egy szolgáltatónál. Nem terheltünk semmit; próbáld újra. |
Korlátok
- Szövegfordítás: kérésenként legfeljebb 50 szöveg és 20 000 karakter, szövegenként 5000.
- Szövegfelolvasás: kérésenként legfeljebb 4096 karakter.
- Beszédátírás: legfeljebb 25 MB-os és 60 perces fájlok.
- Élő fordítás: fiókonként legfeljebb 10 egyidejű munkamenet, egyenként 2 óra, valós idejű hanggal.
- Videók: legfeljebb 5 perc és 4 GB, egyszerre 3 készülhet; az eredményeket 7 napig őrizzük.
- Kulcsonkénti percenkénti korlát: 300 fordítás, 120 felolvasás, 60 átírás és 20 új videó.
- 32 nyelv: angol, török, német, francia, spanyol, olasz, portugál, orosz, japán, koreai, kínai, arab, hindi, holland, lengyel, svéd, norvég, dán, finn, görög, cseh, román, magyar, ukrán, héber, thai, vietnámi, indonéz, maláj, észt, perzsa és katalán.
Számlázás
- Előre fizetés: kártyával tölthetsz fel kreditet $10-tól; minden hívás az egyenlegedből vonódik le.
- A kártyás feldolgozási díjat fizetéskor megmutatjuk és hozzáadjuk, így a teljes kreditet felhasználhatod.
- A kredit a vásárlástól számított 12 hónapig használható fel. Nem téríthető vissza.
- A mi oldalunkon meghiúsult hívásért nem számítunk fel díjat, a sikertelen videó árát pedig visszatérítjük.
- Ha fogy az egyenleged, e-mailt küldünk; nullánál a hívásokat 402-es kóddal elutasítjuk, amíg fel nem töltesz kreditet.