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.
Autentisering
Varje begäran skickar din API-nyckel i Authorization-headern. Nycklar skapas och återkallas i din översikt; alla förbrukar samma saldo.
- Registrera dig gratis på sponkly.com och öppna Översikt → Utvecklar-API.
- Fyll på saldo (från $10) och skapa en API-nyckel.
- 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.
- 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).
- Foga ihop dem i den här ordningen, åtskilda av punkter: tidsstämpel, metod, sökväg med frågesträng och body-hashen.
- Gör en HMAC-SHA256 av den texten med din signeringshemlighet, som hex med gemener.
- 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.
- 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.
/v1/translateTextö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.
wss://api.sponkly.com/v1/live?source=en&target=trLiveö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 servern | Vad 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.
/v1/speechText 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.mp3Fä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.
/v1/transcribeTal 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" }/v1/videosVideoundertexter 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.
/v1/balance · /v1/usage · /v1/languagesSaldo, 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": "…" } }| 400 | invalid_text · invalid_target · text_too_long … | Något i begäran saknas eller är inte tillåtet; meddelandet säger vad. |
| 401 | missing_key · invalid_key | Ingen API-nyckel, eller en nyckel som är fel eller återkallad. |
| 402 | insufficient_balance | Ditt 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. |
| 502 | translation_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å.