Fejlesztői API

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

Élő hangfordítás
Küldd be a beszédet streamként, és másodperceken belül visszakapod a lefordított feliratot és a lefordított hangot.
0,10 USD / perc
Élő felirat
Ugyanaz az élő stream, csak lefordított felirattal.
0,05 USD / perc
Szövegfordítás
Természetes, a szövegkörnyezetet figyelembe vevő fordítás egy vagy akár 50 szövegre.
10,00 USD / 1 millió karakter
Szövegfelolvasás
Felolvasott szöveg természetes hangon, MP3, WAV vagy Opus formátumban.
30,00 USD / 1 millió karakter
Beszédátírás
Hangból vagy videóból szöveg időbélyegekkel, igény szerint lefordítva.
0,01 USD / perc
Videófelirat
A videót beégetett, lefordított felirattal kapod vissza, SRT-fájlokkal együtt.
0,20 USD / perc
Videószinkron
A videót egy másik nyelven megszólalva kapod vissza, ha kéred, felirattal.
0,50 USD / perc

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.

  1. Regisztrálj ingyen a sponkly.com oldalon, és nyisd meg: Irányítópult → Fejlesztői API.
  2. Tölts fel kreditet ($10-tól), és hozz létre egy API-kulcsot.
  3. 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.

  1. 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).
  2. 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.
  3. Készíts ebből a szövegből HMAC-SHA256-ot az aláírási titkoddal, kisbetűs hexadecimális formában.
  4. 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.
  5. 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.
POST/v1/translate

Szö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.

WSwss://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őlMit 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.

POST/v1/speech

Szö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.mp3

Mező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ó.

POST/v1/transcribe

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

Videó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.

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

Egyenleg, 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": "…" } }
400invalid_text · invalid_target · text_too_long …A kérésből hiányzik valami, vagy valami nem megengedett; az üzenet megmondja, mi.
401missing_key · invalid_keyNincs API-kulcs, vagy a kulcs hibás vagy visszavont.
402insufficient_balanceAz 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.
502translation_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.