Utvikler-API

Sanntidsoversettelse for ditt eget produkt

Ett API for sanntidsoversettelse av tale, tekstoversettelse, tale og video på 32 språk. Forhåndsbetalt kreditt, betal bare for det du bruker, ingen månedsavgift.

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

Hva det koster

Hvert kall betales fra den forhåndsbetalte saldoen din. Et kall som feiler hos oss, belastes ikke.

Sanntidsoversettelse av tale
Strøm inn tale, og få oversatte undertekster og en oversatt stemme tilbake i løpet av sekunder.
0,10 USD per minutt
Sanntidsteksting
Den samme sanntidsstrømmen, bare med oversatte undertekster.
0,05 USD per minutt
Tekstoversettelse
Naturlig, kontekstbevisst oversettelse av én tekst eller opptil 50.
10,00 USD per 1 mill. tegn
Tekst til tale
Tekst lest opp med en naturlig stemme, som MP3, WAV eller Opus.
30,00 USD per 1 mill. tegn
Tale til tekst
Lyd eller video til tekst med tidsstempler, eventuelt oversatt.
0,01 USD per minutt
Videoteksting
Videoen tilbake med innbrente oversatte undertekster, pluss SRT-filer.
0,20 USD per minutt
Videodubbing
Videoen tilbake med tale på et annet språk, med undertekster om du vil.
0,50 USD per minutt

Autentisering

Hver forespørsel sender API-nøkkelen din i Authorization-headeren. Nøkler opprettes og trekkes tilbake i oversikten; alle bruker av samme saldo.

  1. Registrer deg gratis på sponkly.com og åpne Oversikt → Utvikler-API.
  2. Fyll på saldo (fra $10) og opprett en API-nøkkel.
  3. Send forespørsler til https://api.sponkly.com/v1 med Authorization: Bearer <your key>.
Base URL:      https://api.sponkly.com/v1
Authorization: Bearer spk_…

Signerte forespørsler

Hver API-nøkkel har en signeringshemmelighet. Når du signerer forespørslene dine med den, er en stjålet nøkkel verdiløs alene, en forespørsel kan ikke endres underveis, og samme forespørsel kan ikke sendes to ganger. Slå på «Krev signerte forespørsler» for nøkkelen i oversikten, så avvises alle usignerte forespørsler.

  1. Ta gjeldende tid i Unix-sekunder og SHA-256 av nøyaktig den bodyen du sender (ved filopplasting: filens byte; for GET og live-socketen: en tom body).
  2. Slå dem sammen i denne rekkefølgen, adskilt med punktum: tidsstempel, metode, sti med spørrestreng og body-hashen.
  3. Lag en HMAC-SHA256 av den teksten med signeringshemmeligheten din, som hex med små bokstaver.
  4. Send den som X-Sponkly-Signature: v1=<signature>, med tiden som X-Sponkly-Timestamp. En signatur gjelder i 5 minutter og for én forespørsel.
  5. Sender du den samme forespørselen to ganger innen ett sekund (et raskt nytt forsøk eller en spørring)? Oppgi tiden i millisekunder i stedet; det godtas 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" }));

Hold nøklene dine trygge

  • Kall API-et fra serveren din. Legg aldri en nøkkel eller en signeringshemmelighet i en nettside, en mobilapp eller et offentlig repository.
  • Krev signerte forespørsler for alle nøkler i produksjon.
  • Legg inn adressene til serverne dine i nøkkelens tillatte adresser, så nøkkelen ikke virker fra noe annet sted.
  • Sett en daglig forbruksgrense per nøkkel, så en feil eller lekkasje bare kan koste et begrenset beløp.
  • Bruk én nøkkel per app eller miljø, og trekk tilbake en nøkkel med en gang du tror den er avslørt. Du kan også lage en ny signeringshemmelighet når som helst.
  • Gjentatte feil nøkler eller signaturer fra én adresse sperrer den adressen i 15 minutter.
POST/v1/translate

Tekstoversettelse

Oversetter én tekst eller en liste med opptil 50 til hvilket som helst av de 32 språkene. Utelat kildespråket for å få det gjenkjent 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 (språkkode), source (valgfritt), context (valgfritt, opptil 1 000 tegn som forteller hva teksten handler om). Du betaler per sendt tegn.

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

Sanntidsoversettelse av tale

En WebSocket for tale i sanntid: send lyden mens det snakkes, og motta oversatte undertekster og, hvis du ber om det, en oversatt stemme. Tretten store språk oversettes av en talemodell i sanntid med omtrent 1–2 sekunders forsinkelse; de andre av vår egen strømmepipeline.

// 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.
Melding fra serverenHva den betyr
{"t":"ready","engine":"openai|own"}Økten er åpen; engine forteller hvilken oversettelsesvei som brukes for dette språket.
{"t":"partial","text":"…"}Talen som gjenkjennes akkurat nå (kan fortsatt endre seg).
{"t":"cap","id","text","done"}En oversatt linje: vises mens den vokser, endelig når done er true.
{"t":"pcm","d":"<base64>","r":24000}En bit av den oversatte stemmen: 16-biters mono-PCM med oppgitt samplingsfrekvens, i base64. Spill av bitene rett etter hverandre.
{"t":"problem","text":"noMinutes"}Saldoen din er brukt opp; økten lukkes.

Parametere: source og target (språkkoder), voice=0 for bare undertekster (halv pris). Send lyd i sanntid (raskere avvises). Opptil 10 økter samtidig per konto, 2 timer hver. Du betaler per sekund oversatt tale; stillhet og musikk er gratis.

POST/v1/speech

Tekst til tale

Gjør tekst om 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 (opptil 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). Kostnaden står i headeren X-Sponkly-Cost-Usd.

POST/v1/transcribe

Tale til tekst

Last opp en lyd- eller videofil (opptil 25 MB og 60 minutter); få teksten med tidsstempler, og oversettelsen hvis 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

Videoteksting og dubbing

Send en video på opptil 5 minutter og få den tilbake oversatt: innbrente undertekster, en oversatt stemme eller begge deler, pluss undertekstfiler på begge språk.

# 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 (valgfritt), dub (true for en oversatt stemme), subtitles (translated, original, both eller none), content_type (video/mp4 eller video/quicktime), size_bytes, title (valgfritt). Du betaler per sekund video når lengden er kjent. Resultatene kan lastes ned i 7 dager.

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

Saldo, bruk og språk

Sjekk saldoen og når den eldste kreditten din utløper, list opp de fakturerte kallene dine, og hent språkene og gjeldende 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 }

Feil

Feil returneres som JSON med en stabil kode og en lesbar melding.

{ "error": { "code": "insufficient_balance", "message": "…" } }
400invalid_text · invalid_target · text_too_long …Noe i forespørselen mangler eller er ikke tillatt; meldingen sier hva.
401missing_key · invalid_keyIngen API-nøkkel, eller en nøkkel som er feil eller trukket tilbake.
402insufficient_balanceSaldoen din dekker ikke dette kallet. Fyll på saldo i oversikten.
429—For mange forespørsler samtidig. Vent litt og prøv igjen.
502translation_failed · speech_failed …Det feilet hos oss eller hos en leverandør. Du ble ikke belastet; prøv igjen.

Grenser

  • Tekstoversettelse: opptil 50 tekster og 20 000 tegn per forespørsel, 5 000 per tekst.
  • Tekst til tale: opptil 4 096 tegn per forespørsel.
  • Tale til tekst: filer på opptil 25 MB og 60 minutter.
  • Sanntidsoversettelse: opptil 10 økter samtidig per konto, 2 timer hver, lyd i sanntid.
  • Videoer: opptil 5 minutter og 4 GB, 3 under behandling samtidig; resultater lagres i 7 dager.
  • Grenser per nøkkel per minutt: 300 oversettelser, 120 talesynteser, 60 transkripsjoner og 20 nye videoer.
  • 32 språk: engelsk, tyrkisk, tysk, fransk, spansk, italiensk, portugisisk, russisk, japansk, koreansk, kinesisk, arabisk, hindi, nederlandsk, polsk, svensk, norsk, dansk, finsk, gresk, tsjekkisk, rumensk, ungarsk, ukrainsk, hebraisk, thai, vietnamesisk, indonesisk, malayisk, estisk, persisk og katalansk.

Fakturering

  • Forhåndsbetalt: fyll på med kort fra $10; hvert kall trekkes fra saldoen din.
  • Kortgebyret vises og legges til i kassen, slik at hele kreditten er din å bruke.
  • Kreditten kan brukes i 12 måneder etter kjøpet. Den refunderes ikke.
  • Et kall som feiler hos oss, belastes ikke, og en video som feiler, refunderes.
  • Når saldoen begynner å bli lav, sender vi deg en e-post; ved null avvises kall med 402 til du fyller på.