Udvikler-API

Liveoversættelse til dit eget produkt

Ét API til liveoversættelse af tale, tekstoversættelse, oplæsning og video på 32 sprog. Forudbetalt kredit, betal kun for det, du bruger, intet månedligt gebyr.

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

Hvad det koster

Hvert kald betales fra din forudbetalte saldo. Et kald, der fejler hos os, koster ikke noget.

Liveoversættelse af tale
Stream tale ind, og få oversatte undertekster og en oversat stemme tilbage på få sekunder.
0,10 US$ pr. minut
Liveundertekster
Samme livestream, kun med oversatte undertekster.
0,05 US$ pr. minut
Tekstoversættelse
Naturlig oversættelse, der forstår sammenhængen, af én tekst eller op til 50.
10,00 US$ pr. 1 mio. tegn
Tekst til tale
Tekst læst højt med en naturlig stemme, som MP3, WAV eller Opus.
30,00 US$ pr. 1 mio. tegn
Tale til tekst
Lyd eller video til tekst med tidsstempler, eventuelt oversat.
0,01 US$ pr. minut
Videoundertekster
Videoen tilbage med oversatte undertekster brændt ind, plus SRT-filer.
0,20 US$ pr. minut
Eftersynkronisering af video
Videoen tilbage talt på et andet sprog, med undertekster, hvis du vil.
0,50 US$ pr. minut

Godkendelse

Hver forespørgsel har din API-nøgle med i Authorization-headeren. Nøgler oprettes og tilbagekaldes i din oversigt; de trækker alle på den samme saldo.

  1. Tilmeld dig gratis på sponkly.com, og åbn Oversigt → Udvikler-API.
  2. Tilføj kredit (fra $10), og opret en API-nøgle.
  3. Send forespørgsler til https://api.sponkly.com/v1 med Authorization: Bearer <your key>.
Base URL:      https://api.sponkly.com/v1
Authorization: Bearer spk_…

Signerede forespørgsler

Hver API-nøgle har en signeringshemmelighed. Når du signerer dine forespørgsler med den, er en stjålet nøgle alene ubrugelig, en forespørgsel kan ikke ændres undervejs, og den samme forespørgsel kan ikke sendes to gange. Slå »Kræv signerede forespørgsler« til for nøglen i din oversigt, så afvises enhver usigneret forespørgsel.

  1. Tag det aktuelle tidspunkt i Unix-sekunder og SHA-256 af præcis den body, du sender (ved filupload: filens bytes; ved GET og live-socketten: en tom body).
  2. Sæt dem sammen, adskilt af punktummer, i denne rækkefølge: tidsstempel, metode, sti med query string og body-hashen.
  3. Lav en HMAC-SHA256 af den tekst med din signeringshemmelighed, som hex med små bogstaver.
  4. Send den som X-Sponkly-Signature: v1=<signature> med tidspunktet som X-Sponkly-Timestamp. En signatur gælder i 5 minutter og til én forespørgsel.
  5. Sender du den samme anmodning to gange inden for et sekund (et hurtigt genforsøg eller en forespørgsel)? Angiv tiden i millisekunder i stedet; det accepteres også og holder hver 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" }));

Pas godt på dine nøgler

  • Kald API'et fra din server. Læg aldrig en nøgle eller en signeringshemmelighed på en webside, i en mobilapp eller i et offentligt repository.
  • Kræv signerede forespørgsler for alle nøgler i produktion.
  • Angiv dine servers adresser under nøglens tilladte adresser, så nøglen ikke virker fra andre steder.
  • Sæt et dagligt forbrugsloft pr. nøgle, så en fejl eller en lækage kun kan koste et begrænset beløb.
  • Brug én nøgle pr. app eller miljø, og tilbagekald en nøgle, så snart du tror, den er blevet afsløret. Du kan også til enhver tid lave en ny signeringshemmelighed.
  • Gentagne forkerte nøgler eller signaturer fra én adresse spærrer adressen i 15 minutter.
POST/v1/translate

Tekstoversættelse

Oversætter én tekst eller en liste med op til 50 til et hvilket som helst af de 32 sprog. Udelad kildesproget for at få det registreret automatisk.

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

Felter: text (streng eller array), target (sprogkode), source (valgfri), context (valgfri, op til 1.000 tegn, der fortæller, hvad teksten handler om). Du betaler pr. sendt tegn.

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

Liveoversættelse af tale

En WebSocket til live tale: send lyden, mens der tales, og modtag oversatte undertekster og, hvis du beder om det, en oversat stemme. Tretten store sprog oversættes af en talemodel i realtid med ca. 1–2 sekunders forsinkelse; de øvrige af vores egen streaming-pipeline.

// 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.
Besked fra serverenHvad den betyder
{"t":"ready","engine":"openai|own"}Sessionen er åben; engine viser, hvilken oversættelsesvej der bruges til dette sprog.
{"t":"partial","text":"…"}Den tale, der genkendes lige nu (den kan stadig ændre sig).
{"t":"cap","id","text","done"}En oversat linje: vises, mens den vokser, og er endelig, når done er true.
{"t":"pcm","d":"<base64>","r":24000}Et stykke af den oversatte stemme: 16-bit mono-PCM med den angivne samplingrate, base64. Afspil stykkerne lige efter hinanden.
{"t":"problem","text":"noMinutes"}Din saldo er brugt op; sessionen lukkes.

Parametre: source og target (sprogkoder), voice=0 for kun undertekster (halv pris). Send lyden i realtid (hurtigere afvises). Op til 10 samtidige sessioner pr. konto, 2 timer hver. Du betaler pr. sekund oversat tale; stilhed og musik er gratis.

POST/v1/speech

Tekst til tale

Gør tekst til naturlig tale og returnerer selve lydfilen.

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

Felter: text (op til 4.096 tegn), 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). Prisen står i headeren X-Sponkly-Cost-Usd.

POST/v1/transcribe

Tale til tekst

Upload en lyd- eller videofil (op til 25 MB og 60 minutter); få teksten med tidsstempler og en oversættelse, hvis du beder om det.

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

Videoundertekster og eftersynkronisering

Send en video på op til 5 minutter, og få den oversat tilbage: undertekster brændt ind, en oversat stemme eller begge dele, plus undertekstfiler på begge sprog.

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

Felter: target, source (valgfri), dub (true for en oversat stemme), subtitles (translated, original, both eller none), content_type (video/mp4 eller video/quicktime), size_bytes, title (valgfri). Du betaler pr. sekund video, når længden er kendt. Resultaterne kan downloades i 7 dage.

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

Saldo, forbrug og sprog

Se din saldo, og hvornår din ældste kredit udløber, få en liste over dine afregnede kald, og hent sprogene og de aktuelle 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 }

Fejl

Fejl returneres som JSON med en fast kode og en læsbar besked.

{ "error": { "code": "insufficient_balance", "message": "…" } }
400invalid_text · invalid_target · text_too_long …Noget i forespørgslen mangler eller er ikke tilladt; beskeden siger hvad.
401missing_key · invalid_keyIngen API-nøgle, eller en nøgle, der er forkert eller tilbagekaldt.
402insufficient_balanceDin saldo dækker ikke dette kald. Tilføj kredit i oversigten.
429—For mange forespørgsler på én gang. Vent et øjeblik, og prøv igen.
502translation_failed · speech_failed …Det fejlede hos os eller hos en udbyder. Du er ikke blevet opkrævet; prøv igen.

Grænser

  • Tekstoversættelse: op til 50 tekster og 20.000 tegn pr. forespørgsel, 5.000 pr. tekst.
  • Tekst til tale: op til 4.096 tegn pr. forespørgsel.
  • Tale til tekst: filer på op til 25 MB og 60 minutter.
  • Liveoversættelse: op til 10 samtidige sessioner pr. konto, 2 timer hver, lyd i realtid.
  • Videoer: op til 5 minutter og 4 GB, 3 under behandling ad gangen; resultaterne gemmes i 7 dage.
  • Grænser pr. nøgle i minuttet: 300 oversættelser, 120 oplæsninger, 60 transskriptioner og 20 nye videoer.
  • 32 sprog: engelsk, tyrkisk, tysk, fransk, spansk, italiensk, portugisisk, russisk, japansk, koreansk, kinesisk, arabisk, hindi, hollandsk, polsk, svensk, norsk, dansk, finsk, græsk, tjekkisk, rumænsk, ungarsk, ukrainsk, hebraisk, thai, vietnamesisk, indonesisk, malajisk, estisk, persisk og catalansk.

Fakturering

  • Forudbetalt: tilføj kredit med kort fra $10; hvert kald trækkes fra din saldo.
  • Kortgebyret vises og lægges til ved betalingen, så du kan bruge hele din kredit.
  • Kreditten kan bruges i 12 måneder efter købet. Den refunderes ikke.
  • Et kald, der fejler hos os, koster ikke noget, og en video, der fejler, refunderes.
  • Når din saldo er ved at være lav, sender vi dig en e-mail; ved nul afvises kald med 402, indtil du tilføjer kredit.