Utvecklar-API

Liveöversättning för din egen produkt

Ett API för liveöversättning av tal, textöversättning, tal och video på 32 språk. Förbetald kredit, betala bara för det du använder, ingen månadsavgift.

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

Vad det kostar

Varje anrop betalas från ditt förbetalda saldo. Ett anrop som misslyckas på vår sida debiteras inte.

Liveöversättning av tal
Strömma in tal och få tillbaka översatta undertexter och en översatt röst inom några sekunder.
0,10 US$ per minut
Liveundertexter
Samma liveström, bara översatta undertexter.
0,05 US$ per minut
Textöversättning
Naturlig, kontextmedveten översättning av en text eller upp till 50.
10,00 US$ per 1 milj. tecken
Text till tal
Text uppläst med en naturlig röst, som MP3, WAV eller Opus.
30,00 US$ per 1 milj. tecken
Tal till text
Ljud eller video till text med tidsstämplar, översatt om du vill.
0,01 US$ per minut
Videoundertexter
Videon tillbaka med inbrända översatta undertexter, plus SRT-filer.
0,20 US$ per minut
Videodubbning
Videon tillbaka talad på ett annat språk, med undertexter om du vill.
0,50 US$ per minut

Autentisering

Varje begäran skickar din API-nyckel i Authorization-headern. Nycklar skapas och återkallas i din översikt; alla förbrukar samma saldo.

  1. Registrera dig gratis på sponkly.com och öppna Översikt → Utvecklar-API.
  2. Fyll på saldo (från $10) och skapa en API-nyckel.
  3. Skicka begäranden till https://api.sponkly.com/v1 med Authorization: Bearer <your key>.
Base URL:      https://api.sponkly.com/v1
Authorization: Bearer spk_…

Signerade begäranden

Varje API-nyckel har en signeringshemlighet. När du signerar dina begäranden med den är en stulen nyckel värdelös på egen hand, en begäran kan inte ändras på vägen och samma begäran kan inte skickas två gånger. Slå på ”Kräv signerade begäranden” för nyckeln i din översikt så nekas alla osignerade begäranden.

  1. Ta den aktuella tiden i Unix-sekunder och SHA-256 av exakt den body du skickar (vid filuppladdning: filens byte; för GET och live-socketen: en tom body).
  2. Foga ihop dem i den här ordningen, åtskilda av punkter: tidsstämpel, metod, sökväg med frågesträng och body-hashen.
  3. Gör en HMAC-SHA256 av den texten med din signeringshemlighet, som hex med gemener.
  4. Skicka den som X-Sponkly-Signature: v1=<signature>, med tiden som X-Sponkly-Timestamp. En signatur gäller i 5 minuter och för en enda begäran.
  5. Skickar du samma begäran två gånger inom en sekund (ett snabbt nytt försök eller en avfrågning)? Ange tiden i millisekunder i stället; det godtas också och håller varje signatur unik.
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" }));

Skydda dina nycklar

  • Anropa API:t från din server. Lägg aldrig en nyckel eller en signeringshemlighet i en webbsida, en mobilapp eller ett offentligt repository.
  • Kräv signerade begäranden för alla nycklar i produktion.
  • Lägg in dina servrars adresser i nyckelns tillåtna adresser, så att nyckeln inte fungerar från något annat ställe.
  • Ange en daglig utgiftsgräns per nyckel, så att ett misstag eller en läcka bara kan kosta ett begränsat belopp.
  • Använd en nyckel per app eller miljö, och återkalla en nyckel så fort du tror att den har exponerats. Du kan också skapa en ny signeringshemlighet när som helst.
  • Upprepade felaktiga nycklar eller signaturer från en adress spärrar den adressen i 15 minuter.
POST/v1/translate

Textöversättning

Översätter en text eller en lista med upp till 50 till något av de 32 språken. Utelämna källspråket så identifieras det automatiskt.

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

Fält: text (sträng eller array), target (språkkod), source (valfritt), context (valfritt, upp till 1 000 tecken som beskriver vad texten handlar om). Du betalar per skickat tecken.

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

Liveöversättning av tal

En WebSocket för livetal: skicka ljudet medan det talas och ta emot översatta undertexter och, om du vill, en översatt röst. Tretton stora språk översätts av en talmodell i realtid med ungefär 1–2 sekunders fördröjning; övriga av vår egen strömningspipeline.

// 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.
Meddelande från servernVad det betyder
{"t":"ready","engine":"openai|own"}Sessionen är öppen; engine anger vilken översättningsväg som används för språket.
{"t":"partial","text":"…"}Talet som känns igen just nu (kan fortfarande ändras).
{"t":"cap","id","text","done"}En översatt rad: visas medan den växer, slutgiltig när done är true.
{"t":"pcm","d":"<base64>","r":24000}En bit av den översatta rösten: 16-bitars mono-PCM med angiven samplingsfrekvens, i base64. Spela upp bitarna direkt efter varandra.
{"t":"problem","text":"noMinutes"}Ditt saldo är slut; sessionen stängs.

Parametrar: source och target (språkkoder), voice=0 för bara undertexter (halva priset). Skicka ljud i realtid (snabbare nekas). Upp till 10 samtidiga sessioner per konto, 2 timmar var. Du betalar per sekund översatt tal; tystnad och musik är gratis.

POST/v1/speech

Text till tal

Gör om text till naturligt tal och returnerar själva ljudfilen.

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

Fält: text (upp till 4 096 tecken), language, voice (female, male, neutral eller alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav eller opus), speed (0.5–2). Kostnaden finns i headern X-Sponkly-Cost-Usd.

POST/v1/transcribe

Tal till text

Ladda upp en ljud- eller videofil (upp till 25 MB och 60 minuter); få texten med tidsstämplar, och översättningen om du ber om den.

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

Videoundertexter och dubbning

Skicka en video på upp till 5 minuter och få tillbaka den översatt: inbrända undertexter, en översatt röst eller båda, plus undertextfiler på båda språken.

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

Fält: target, source (valfritt), dub (true för en översatt röst), subtitles (translated, original, both eller none), content_type (video/mp4 eller video/quicktime), size_bytes, title (valfritt). Du betalar per sekund video när längden är känd. Resultaten kan laddas ned i 7 dagar.

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

Saldo, användning och språk

Se ditt saldo och när din äldsta kredit går ut, lista dina debiterade anrop och hämta språken och aktuella priser.

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 }

Fel

Fel returneras som JSON med en stabil kod och ett läsbart meddelande.

{ "error": { "code": "insufficient_balance", "message": "…" } }
400invalid_text · invalid_target · text_too_long …Något i begäran saknas eller är inte tillåtet; meddelandet säger vad.
401missing_key · invalid_keyIngen API-nyckel, eller en nyckel som är fel eller återkallad.
402insufficient_balanceDitt saldo räcker inte för anropet. Fyll på saldo i översikten.
429—För många begäranden samtidigt. Vänta en stund och försök igen.
502translation_failed · speech_failed …Det misslyckades på vår sida eller hos en leverantör. Du har inte debiterats; försök igen.

Gränser

  • Textöversättning: upp till 50 texter och 20 000 tecken per begäran, 5 000 per text.
  • Text till tal: upp till 4 096 tecken per begäran.
  • Tal till text: filer upp till 25 MB och 60 minuter.
  • Liveöversättning: upp till 10 samtidiga sessioner per konto, 2 timmar var, ljud i realtid.
  • Videor: upp till 5 minuter och 4 GB, 3 under bearbetning samtidigt; resultat sparas i 7 dagar.
  • Gränser per nyckel och minut: 300 översättningar, 120 talsynteser, 60 transkriberingar och 20 nya videor.
  • 32 språk: engelska, turkiska, tyska, franska, spanska, italienska, portugisiska, ryska, japanska, koreanska, kinesiska, arabiska, hindi, nederländska, polska, svenska, norska, danska, finska, grekiska, tjeckiska, rumänska, ungerska, ukrainska, hebreiska, thailändska, vietnamesiska, indonesiska, malajiska, estniska, persiska och katalanska.

Fakturering

  • Förbetalt: fyll på med kort från $10; varje anrop dras från ditt saldo.
  • Kortavgiften visas och läggs till i kassan, så att hela krediten är din att använda.
  • Krediten kan användas i 12 månader efter köpet. Den återbetalas inte.
  • Ett anrop som misslyckas på vår sida debiteras inte, och en video som misslyckas återbetalas.
  • När saldot börjar ta slut mejlar vi dig; vid noll nekas anrop med 402 tills du fyller på.