API pentru dezvoltatori

Traducere live pentru propriul tău produs

Un singur API pentru traducere vocală live, traducere de text, vorbire și video în 32 de limbi. Credit preplătit, plătești doar ce folosești, fără taxă lunară.

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"
}

Cât costă

Fiecare apel se plătește din soldul preplătit. Un apel care eșuează din cauza noastră nu se taxează.

Traducere vocală live
Trimiți vorbirea în flux și primești înapoi, în câteva secunde, subtitrări traduse și o voce tradusă.
0,10 USD pe minut
Subtitrări live
Același flux live, doar cu subtitrări traduse.
0,05 USD pe minut
Traducere de text
Traducere naturală, care ține cont de context, pentru un text sau până la 50.
10,00 USD la 1 milion de caractere
Text în vorbire
Text citit cu voce tare de o voce naturală, în MP3, WAV sau Opus.
30,00 USD la 1 milion de caractere
Vorbire în text
Audio sau video transformat în text cu marcaje de timp, opțional tradus.
0,01 USD pe minut
Subtitrări video
Videoclipul înapoi cu subtitrări traduse imprimate pe imagine, plus fișiere SRT.
0,20 USD pe minut
Dublaj video
Videoclipul înapoi vorbit în altă limbă, cu subtitrări dacă vrei.
0,50 USD pe minut

Autentificare

Fiecare cerere include cheia ta API în antetul Authorization. Cheile se creează și se revocă din panou; toate consumă din același sold.

  1. Înscrie-te gratuit pe sponkly.com și deschide Panou → API pentru dezvoltatori.
  2. Adaugă credit (de la $10) și creează o cheie API.
  3. Trimite cereri la https://api.sponkly.com/v1 cu Authorization: Bearer <your key>.
Base URL:      https://api.sponkly.com/v1
Authorization: Bearer spk_…

Cereri semnate

Fiecare cheie API vine cu un secret de semnare. Când îți semnezi cererile cu el, o cheie furată singură nu folosește la nimic, o cerere nu poate fi modificată pe drum, iar aceeași cerere nu poate fi trimisă de două ori. Activează „Impune cereri semnate” pentru cheie în panou și orice cerere nesemnată va fi refuzată.

  1. Ia ora curentă în secunde Unix și SHA-256 al corpului exact pe care îl trimiți (la încărcarea unui fișier: octeții fișierului; pentru GET și socketul live: un corp gol).
  2. Unește-le, separate prin puncte, în această ordine: marcaj de timp, metodă, cale cu query string și hash-ul corpului.
  3. Calculează un HMAC-SHA256 al acestui text cu secretul tău de semnare, în hex cu litere mici.
  4. Trimite-l ca X-Sponkly-Signature: v1=<signature>, cu ora în X-Sponkly-Timestamp. O semnătură este valabilă 5 minute și pentru o singură cerere.
  5. Trimiți aceeași cerere de două ori într-o secundă (o reîncercare rapidă sau o interogare)? Dă timpul în milisecunde; este acceptat și așa și păstrează fiecare semnătură unică.
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" }));

Păstrează-ți cheile în siguranță

  • Apelează API-ul de pe serverul tău. Nu pune niciodată o cheie sau un secret de semnare într-o pagină web, într-o aplicație mobilă sau într-un depozit public.
  • Impune cereri semnate pentru fiecare cheie din producție.
  • Trece adresele serverelor tale la adresele permise ale cheii, ca aceasta să nu funcționeze de nicăieri altundeva.
  • Setează o limită zilnică de cheltuieli pentru fiecare cheie, ca o greșeală sau o scurgere să coste doar o sumă limitată.
  • Folosește câte o cheie pentru fiecare aplicație sau mediu și revocă o cheie imediat ce crezi că a fost expusă. Poți crea oricând și un nou secret de semnare.
  • Cheile sau semnăturile greșite repetate de la o adresă blochează acea adresă timp de 15 minute.
POST/v1/translate

Traducere de text

Traduce un text sau o listă de până la 50 în oricare dintre cele 32 de limbi. Omite limba sursă ca să fie detectată automat.

# 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"])

Câmpuri: text (șir sau array), target (codul limbii), source (opțional), context (opțional, până la 1.000 de caractere care spun despre ce este textul). Plătești pentru fiecare caracter trimis.

WSwss://api.sponkly.com/v1/live?source=en&target=tr

Traducere vocală live

Un WebSocket pentru vorbire live: trimite sunetul pe măsură ce se vorbește și primești subtitrări traduse și, dacă ceri, o voce tradusă. Treisprezece limbi importante sunt traduse de un model de vorbire în timp real, cu o întârziere de aproximativ 1–2 secunde; celelalte de propriul nostru sistem de streaming.

// 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.
Mesaj de la serverCe înseamnă
{"t":"ready","engine":"openai|own"}Sesiunea este deschisă; engine arată ce traseu de traducere deservește această limbă.
{"t":"partial","text":"…"}Vorbirea recunoscută chiar acum (se mai poate schimba).
{"t":"cap","id","text","done"}Un rând tradus: afișat pe măsură ce crește, final când done este true.
{"t":"pcm","d":"<base64>","r":24000}O bucată din vocea tradusă: PCM mono pe 16 biți la rata indicată, în base64. Redă bucățile una după alta.
{"t":"problem","text":"noMinutes"}Soldul s-a terminat; sesiunea se închide.

Parametri: source și target (coduri de limbă), voice=0 doar pentru subtitrări (la jumătate de preț). Trimite sunetul în timp real (mai rapid este refuzat). Până la 10 sesiuni simultane per cont, de câte 2 ore. Plătești pe secundă de vorbire tradusă; liniștea și muzica sunt gratuite.

POST/v1/speech

Text în vorbire

Transformă textul în vorbire naturală și returnează direct fișierul audio.

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

Câmpuri: text (până la 4.096 de caractere), language, voice (female, male, neutral sau alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav sau opus), speed (0.5–2). Costul este în antetul X-Sponkly-Cost-Usd.

POST/v1/transcribe

Vorbire în text

Încarcă un fișier audio sau video (până la 25 MB și 60 de minute); primești textul cu marcaje de timp și traducerea lui, dacă o ceri.

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

Subtitrări și dublaj video

Trimite un videoclip de până la 5 minute și primește-l înapoi tradus: cu subtitrări imprimate, cu o voce tradusă sau ambele, plus fișiere de subtitrare în ambele limbi.

# 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" } } }

Câmpuri: target, source (opțional), dub (true pentru o voce tradusă), subtitles (translated, original, both sau none), content_type (video/mp4 sau video/quicktime), size_bytes, title (opțional). Plătești pe secundă de video, după ce durata lui este cunoscută. Rezultatele pot fi descărcate timp de 7 zile.

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

Sold, consum și limbi

Verifică soldul și când expiră cel mai vechi credit, vezi lista apelurilor facturate și obține limbile și prețurile actuale.

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 }

Erori

Erorile vin înapoi ca JSON, cu un cod stabil și un mesaj ușor de citit.

{ "error": { "code": "insufficient_balance", "message": "…" } }
400invalid_text · invalid_target · text_too_long …Lipsește ceva din cerere sau ceva nu este permis; mesajul spune ce.
401missing_key · invalid_keyLipsește cheia API sau cheia este greșită ori revocată.
402insufficient_balanceSoldul nu acoperă acest apel. Adaugă credit din panou.
429—Prea multe cereri deodată. Așteaptă puțin și încearcă din nou.
502translation_failed · speech_failed …A eșuat la noi sau la un furnizor. Nu ai fost taxat; încearcă din nou.

Limite

  • Traducere de text: până la 50 de texte și 20.000 de caractere per cerere, 5.000 per text.
  • Text în vorbire: până la 4.096 de caractere per cerere.
  • Vorbire în text: fișiere de până la 25 MB și 60 de minute.
  • Traducere live: până la 10 sesiuni simultane per cont, de câte 2 ore, cu sunet în timp real.
  • Videoclipuri: până la 5 minute și 4 GB, 3 în lucru simultan; rezultatele se păstrează 7 zile.
  • Limite per cheie, pe minut: 300 de traduceri, 120 de sinteze vocale, 60 de transcrieri și 20 de videoclipuri noi.
  • 32 de limbi: engleză, turcă, germană, franceză, spaniolă, italiană, portugheză, rusă, japoneză, coreeană, chineză, arabă, hindi, neerlandeză, poloneză, suedeză, norvegiană, daneză, finlandeză, greacă, cehă, română, maghiară, ucraineană, ebraică, thailandeză, vietnameză, indoneziană, malaieză, estonă, persană și catalană.

Facturare

  • Preplătit: adaugi credit cu cardul de la $10; fiecare apel se scade din sold.
  • Taxa de procesare a cardului este afișată și adăugată la plată, așa că tot creditul rămâne al tău.
  • Creditul poate fi folosit timp de 12 luni de la cumpărare. Nu se rambursează.
  • Un apel care eșuează din cauza noastră nu se taxează, iar un videoclip care eșuează este rambursat.
  • Când soldul scade, îți trimitem un e-mail; la zero, apelurile sunt refuzate cu 402 până adaugi credit.