API per a desenvolupadors

Traducció en directe per al teu propi producte

Una sola API per a traducció de veu en directe, traducció de text, veu i vídeo en 32 idiomes. Crèdit prepagat, paga només el que facis servir, sense quota mensual.

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

Quant costa

Cada crida es paga del teu saldo prepagat. Una crida que falla per culpa nostra no es cobra.

Traducció de veu en directe
Envia la veu en temps real i rep subtítols traduïts i una veu traduïda en qüestió de segons.
0,10 USD per minut
Subtítols en directe
El mateix flux en directe, només amb subtítols traduïts.
0,05 USD per minut
Traducció de text
Traducció natural i atenta al context d'un text o de fins a 50.
10,00 USD per milió de caràcters
Text a veu
Text llegit en veu alta amb una veu natural, en MP3, WAV o Opus.
30,00 USD per milió de caràcters
Veu a text
Àudio o vídeo a text amb marques de temps, i traduït si vols.
0,01 USD per minut
Subtítols de vídeo
Reps el vídeo amb subtítols traduïts incrustats, i també fitxers SRT.
0,20 USD per minut
Doblatge de vídeo
Reps el vídeo parlat en un altre idioma, amb subtítols si vols.
0,50 USD per minut

Autenticació

Cada sol·licitud porta la teva clau d'API a la capçalera Authorization. Les claus es creen i es revoquen al tauler; totes gasten el mateix saldo.

  1. Registra't gratis a sponkly.com i obre Tauler → API per a desenvolupadors.
  2. Afegeix crèdit (des de $10) i crea una clau d'API.
  3. Envia les sol·licituds a https://api.sponkly.com/v1 amb Authorization: Bearer <your key>.
Base URL:      https://api.sponkly.com/v1
Authorization: Bearer spk_…

Sol·licituds signades

Cada clau d'API inclou un secret de signatura. Si signes les sol·licituds amb ell, una clau robada per si sola no serveix de res, una sol·licitud no es pot modificar pel camí i la mateixa sol·licitud no es pot enviar dues vegades. Activa «Exigeix sol·licituds signades» per a la clau al tauler i es rebutjarà qualsevol sol·licitud sense signar.

  1. Agafa l'hora actual en segons Unix i el SHA-256 del cos exacte que envies (per a una pujada de fitxer: els bytes del fitxer; per a GET i el socket en directe: un cos buit).
  2. Uneix-los separats per punts, en aquest ordre: marca de temps, mètode, ruta amb la cadena de consulta i el hash del cos.
  3. Calcula un HMAC-SHA256 d'aquest text amb el teu secret de signatura, en hexadecimal en minúscules.
  4. Envia'l com a X-Sponkly-Signature: v1=<signature>, amb l'hora com a X-Sponkly-Timestamp. Una signatura és vàlida durant 5 minuts i per a una sola sol·licitud.
  5. Envieu la mateixa sol·licitud dues vegades en menys d'un segon (un reintent ràpid o una consulta periòdica)? Indiqueu l'hora en mil·lisegons; també s'accepta i manté cada signatura única.
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" }));

Protegeix les teves claus

  • Crida l'API des del teu servidor. No posis mai una clau ni un secret de signatura en una pàgina web, una app mòbil o un repositori públic.
  • Exigeix sol·licituds signades per a totes les claus en producció.
  • Afegeix les adreces dels teus servidors a les adreces permeses de la clau, perquè no funcioni des d'enlloc més.
  • Defineix un límit de despesa diari per clau, perquè un error o una filtració només puguin costar una quantitat limitada.
  • Fes servir una clau per app o entorn, i revoca una clau tan bon punt creguis que ha quedat exposada. També pots crear un nou secret de signatura en qualsevol moment.
  • Si una adreça envia repetidament claus o signatures incorrectes, queda bloquejada durant 15 minuts.
POST/v1/translate

Traducció de text

Tradueix un text o una llista de fins a 50 a qualsevol dels 32 idiomes. Si no indiques l'idioma d'origen, es detecta automàticament.

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

Camps: text (cadena o matriu), target (codi d'idioma), source (opcional), context (opcional, fins a 1.000 caràcters que expliquen de què tracta el text). Pagues per caràcter enviat.

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

Traducció de veu en directe

Un WebSocket per a veu en directe: envia l'àudio mentre es parla i rep subtítols traduïts i, si ho demanes, una veu traduïda. Tretze idiomes principals es tradueixen amb un model de veu en temps real amb uns 1–2 segons de retard; la resta, amb el nostre propi sistema 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.
Missatge del servidorQuè vol dir
{"t":"ready","engine":"openai|own"}La sessió és oberta; engine indica quina via de traducció serveix aquest idioma.
{"t":"partial","text":"…"}La veu que s'està reconeixent ara mateix (encara pot canviar).
{"t":"cap","id","text","done"}Una línia traduïda: es mostra a mesura que creix, i és definitiva quan done és true.
{"t":"pcm","d":"<base64>","r":24000}Un fragment de la veu traduïda: PCM mono de 16 bits a la freqüència indicada, en base64. Reprodueix els fragments un darrere l'altre.
{"t":"problem","text":"noMinutes"}S'ha esgotat el saldo; la sessió es tanca.

Paràmetres: source i target (codis d'idioma), voice=0 per a només subtítols (meitat de preu). Envia l'àudio en temps real (més ràpid es rebutja). Fins a 10 sessions alhora per compte, de 2 hores cadascuna. Pagues per segon de veu traduïda; el silenci i la música són gratuïts.

POST/v1/speech

Text a veu

Converteix text en veu natural i retorna directament el fitxer d'àudio.

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

Camps: text (fins a 4.096 caràcters), language, voice (female, male, neutral, o alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav o opus), speed (0.5–2). El cost és a la capçalera X-Sponkly-Cost-Usd.

POST/v1/transcribe

Veu a text

Puja un fitxer d'àudio o vídeo (fins a 25 MB i 60 minuts); rep el text amb marques de temps i, si la demanes, la traducció.

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

Subtítols i doblatge de vídeo

Envia un vídeo de fins a 5 minuts i rep-lo traduït: subtítols incrustats, una veu traduïda o totes dues coses, i també fitxers de subtítols en tots dos idiomes.

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

Camps: target, source (opcional), dub (true per a una veu traduïda), subtitles (translated, original, both o none), content_type (video/mp4 o video/quicktime), size_bytes, title (opcional). Pagues per segon de vídeo un cop se'n coneix la durada. Els resultats es poden baixar durant 7 dies.

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

Saldo, ús i idiomes

Consulta el saldo i quan caduca el crèdit més antic, llista les crides facturades i obtén els idiomes i els preus actuals.

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 }

Errors

Els errors tornen en JSON amb un codi estable i un missatge llegible.

{ "error": { "code": "insufficient_balance", "message": "…" } }
400invalid_text · invalid_target · text_too_long …Falta alguna cosa a la sol·licitud o no està permesa; el missatge diu què.
401missing_key · invalid_keyNo hi ha clau d'API, o la clau és incorrecta o s'ha revocat.
402insufficient_balanceEl saldo no cobreix aquesta crida. Afegeix crèdit al tauler.
429—Massa sol·licituds alhora. Espera un moment i torna-ho a provar.
502translation_failed · speech_failed …Ha fallat per part nostra o d'un proveïdor. No s'ha cobrat res; torna-ho a provar.

Límits

  • Traducció de text: fins a 50 textos i 20.000 caràcters per sol·licitud, 5.000 per text.
  • Text a veu: fins a 4.096 caràcters per sol·licitud.
  • Veu a text: fitxers de fins a 25 MB i 60 minuts.
  • Traducció en directe: fins a 10 sessions alhora per compte, de 2 hores cadascuna, àudio en temps real.
  • Vídeos: fins a 5 minuts i 4 GB, 3 en procés alhora; els resultats es guarden 7 dies.
  • Límits per clau: 300 traduccions, 120 síntesis de veu, 60 transcripcions i 20 vídeos nous per minut.
  • 32 idiomes: anglès, turc, alemany, francès, espanyol, italià, portuguès, rus, japonès, coreà, xinès, àrab, hindi, neerlandès, polonès, suec, noruec, danès, finès, grec, txec, romanès, hongarès, ucraïnès, hebreu, tai, vietnamita, indonesi, malai, estonià, persa i català.

Facturació

  • Prepagament: afegeix crèdit amb targeta des de $10; cada crida es descompta del saldo.
  • La comissió de processament de la targeta es mostra i s'afegeix en pagar, perquè puguis fer servir tot el crèdit.
  • El crèdit es pot fer servir durant 12 mesos després de comprar-lo. No és reemborsable.
  • Una crida que falla per culpa nostra no es cobra, i un vídeo que falla es reemborsa.
  • Quan el saldo és baix t'enviem un correu; a zero, les crides es rebutgen amb 402 fins que afegeixis crèdit.