Live-Übersetzung für Ihr eigenes Produkt
Eine API für Live-Sprachübersetzung, Textübersetzung, Sprachausgabe und Video in 32 Sprachen. Prepaid-Guthaben, Sie zahlen nur, was Sie nutzen, keine Monatsgebühr.
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"
}Was es kostet
Jeder Aufruf wird aus Ihrem Prepaid-Guthaben bezahlt. Ein Aufruf, der auf unserer Seite fehlschlägt, wird nicht berechnet.
Authentifizierung
Jede Anfrage enthält Ihren API-Schlüssel im Authorization-Header. Schlüssel werden in Ihrem Dashboard erstellt und widerrufen; alle verbrauchen dasselbe Guthaben.
- Registrieren Sie sich kostenlos auf sponkly.com und öffnen Sie Dashboard → Entwickler-API.
- Laden Sie Guthaben auf (ab $10) und erstellen Sie einen API-Schlüssel.
- Senden Sie Anfragen an https://api.sponkly.com/v1 mit Authorization: Bearer <your key>.
Base URL: https://api.sponkly.com/v1
Authorization: Bearer spk_…Signierte Anfragen
Zu jedem API-Schlüssel gehört ein Signaturgeheimnis. Wenn Sie Ihre Anfragen damit signieren, ist ein gestohlener Schlüssel allein nutzlos, eine Anfrage kann unterwegs nicht verändert werden, und dieselbe Anfrage kann nicht zweimal gesendet werden. Schalten Sie „Signierte Anfragen erzwingen“ für den Schlüssel in Ihrem Dashboard ein, dann wird jede unsignierte Anfrage abgelehnt.
- Nehmen Sie die aktuelle Zeit in Unix-Sekunden und den SHA-256 des exakten Bodys, den Sie senden (bei einem Datei-Upload: die Bytes der Datei; bei GET und dem Live-Socket: ein leerer Body).
- Verbinden Sie sie in dieser Reihenfolge, getrennt durch Punkte: Zeitstempel, Methode, Pfad mit Query-String und den Body-Hash.
- Bilden Sie mit Ihrem Signaturgeheimnis einen HMAC-SHA256 dieses Textes, als Hex in Kleinbuchstaben.
- Senden Sie ihn als X-Sponkly-Signature: v1=<signature> und die Zeit als X-Sponkly-Timestamp. Eine Signatur gilt 5 Minuten und für eine einzige Anfrage.
- Senden Sie dieselbe Anfrage zweimal innerhalb einer Sekunde (ein schneller Wiederholungsversuch oder eine Abfrage)? Geben Sie die Zeit stattdessen in Millisekunden an; auch das wird akzeptiert und hält jede Signatur eindeutig.
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" }));Schützen Sie Ihre Schlüssel
- Rufen Sie die API von Ihrem Server aus auf. Legen Sie einen Schlüssel oder ein Signaturgeheimnis nie in eine Webseite, eine mobile App oder ein öffentliches Repository.
- Erzwingen Sie signierte Anfragen für jeden Schlüssel in der Produktion.
- Tragen Sie die Adressen Ihrer Server in die erlaubten Adressen des Schlüssels ein, damit der Schlüssel von nirgendwo sonst funktioniert.
- Legen Sie pro Schlüssel ein tägliches Ausgabenlimit fest, damit ein Fehler oder ein Leck nur begrenzt Kosten verursachen kann.
- Verwenden Sie einen Schlüssel pro App oder Umgebung, und widerrufen Sie einen Schlüssel, sobald Sie vermuten, dass er offengelegt wurde. Sie können auch jederzeit ein neues Signaturgeheimnis erstellen.
- Wiederholt falsche Schlüssel oder Signaturen von einer Adresse sperren diese Adresse für 15 Minuten.
/v1/translateTextübersetzung
Übersetzt einen Text oder eine Liste von bis zu 50 Texten in jede der 32 Sprachen. Lassen Sie die Ausgangssprache weg, wird sie automatisch erkannt.
# 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"])Felder: text (String oder Array), target (Sprachcode), source (optional), context (optional, bis zu 1.000 Zeichen, die beschreiben, worum es im Text geht). Sie zahlen pro gesendetem Zeichen.
wss://api.sponkly.com/v1/live?source=en&target=trLive-Sprachübersetzung
Ein WebSocket für Live-Sprache: Senden Sie das Audio, während gesprochen wird, und erhalten Sie übersetzte Untertitel und auf Wunsch eine übersetzte Stimme. Dreizehn große Sprachen übersetzt ein Echtzeit-Sprachmodell mit etwa 1–2 Sekunden Verzögerung, die übrigen unsere eigene 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.| Nachricht vom Server | Bedeutung |
|---|---|
{"t":"ready","engine":"openai|own"} | Die Sitzung ist offen; engine gibt an, welcher Übersetzungsweg diese Sprache bedient. |
{"t":"partial","text":"…"} | Die gerade erkannte Sprache (kann sich noch ändern). |
{"t":"cap","id","text","done"} | Eine übersetzte Zeile: wird beim Wachsen angezeigt und ist endgültig, wenn done true ist. |
{"t":"pcm","d":"<base64>","r":24000} | Ein Stück der übersetzten Stimme: 16-Bit-Mono-PCM mit der angegebenen Abtastrate, base64. Spielen Sie die Stücke direkt hintereinander ab. |
{"t":"problem","text":"noMinutes"} | Ihr Guthaben ist aufgebraucht; die Sitzung wird geschlossen. |
Parameter: source und target (Sprachcodes), voice=0 nur für Untertitel (halber Preis). Senden Sie das Audio in Echtzeit (schneller wird abgelehnt). Bis zu 10 gleichzeitige Sitzungen pro Konto, je 2 Stunden. Sie zahlen pro Sekunde übersetzter Sprache; Stille und Musik sind kostenlos.
/v1/speechText zu Sprache
Wandelt Text in natürliche Sprache um und gibt direkt die Audiodatei zurück.
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.mp3Felder: text (bis zu 4.096 Zeichen), language, voice (female, male, neutral oder alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav oder opus), speed (0.5–2). Die Kosten stehen im Header X-Sponkly-Cost-Usd.
/v1/transcribeSprache zu Text
Laden Sie eine Audio- oder Videodatei hoch (bis zu 25 MB und 60 Minuten) und erhalten Sie den Text mit Zeitstempeln, auf Wunsch auch die Übersetzung.
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/videosVideo-Untertitel und Synchronisation
Senden Sie ein Video von bis zu 5 Minuten und erhalten Sie es übersetzt zurück: mit eingebrannten Untertiteln, einer übersetzten Stimme oder beidem, dazu Untertiteldateien in beiden Sprachen.
# 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" } } }Felder: target, source (optional), dub (true für eine übersetzte Stimme), subtitles (translated, original, both oder none), content_type (video/mp4 oder video/quicktime), size_bytes, title (optional). Sie zahlen pro Sekunde Video, sobald die Länge feststeht. Ergebnisse können 7 Tage lang heruntergeladen werden.
/v1/balance · /v1/usage · /v1/languagesGuthaben, Nutzung und Sprachen
Prüfen Sie Ihr Guthaben und wann Ihr ältestes Guthaben abläuft, listen Sie Ihre abgerechneten Aufrufe auf und rufen Sie die Sprachen und aktuellen Preise ab.
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 }Fehler
Fehler kommen als JSON mit einem festen Code und einer lesbaren Meldung zurück.
{ "error": { "code": "insufficient_balance", "message": "…" } }| 400 | invalid_text · invalid_target · text_too_long … | In der Anfrage fehlt etwas oder ist nicht erlaubt; die Meldung sagt, was. |
| 401 | missing_key · invalid_key | Kein API-Schlüssel oder ein falscher bzw. widerrufener Schlüssel. |
| 402 | insufficient_balance | Ihr Guthaben reicht für diesen Aufruf nicht. Laden Sie im Dashboard Guthaben auf. |
| 429 | — | Zu viele gleichzeitige Anfragen. Warten Sie kurz und versuchen Sie es erneut. |
| 502 | translation_failed · speech_failed … | Der Fehler lag bei uns oder bei einem Anbieter. Ihnen wurde nichts berechnet; versuchen Sie es erneut. |
Limits
- Textübersetzung: bis zu 50 Texte und 20.000 Zeichen pro Anfrage, 5.000 pro Text.
- Text zu Sprache: bis zu 4.096 Zeichen pro Anfrage.
- Sprache zu Text: Dateien bis 25 MB und 60 Minuten.
- Live-Übersetzung: bis zu 10 gleichzeitige Sitzungen pro Konto, je 2 Stunden, Audio in Echtzeit.
- Videos: bis zu 5 Minuten und 4 GB, 3 gleichzeitig in Bearbeitung; Ergebnisse werden 7 Tage gespeichert.
- Pro Schlüssel und Minute: 300 Übersetzungen, 120 Sprachausgaben, 60 Transkriptionen und 20 neue Videos.
- 32 Sprachen: Englisch, Türkisch, Deutsch, Französisch, Spanisch, Italienisch, Portugiesisch, Russisch, Japanisch, Koreanisch, Chinesisch, Arabisch, Hindi, Niederländisch, Polnisch, Schwedisch, Norwegisch, Dänisch, Finnisch, Griechisch, Tschechisch, Rumänisch, Ungarisch, Ukrainisch, Hebräisch, Thai, Vietnamesisch, Indonesisch, Malaiisch, Estnisch, Persisch und Katalanisch.
Abrechnung
- Prepaid: Guthaben per Karte ab $10 aufladen; jeder Aufruf wird von Ihrem Guthaben abgebucht.
- Die Kartengebühr wird beim Bezahlen angezeigt und aufgeschlagen, sodass Ihnen das gesamte Guthaben zur Verfügung steht.
- Guthaben kann ab dem Kauf 12 Monate lang genutzt werden. Es wird nicht erstattet.
- Ein Aufruf, der auf unserer Seite fehlschlägt, wird nicht berechnet, und ein fehlgeschlagenes Video wird erstattet.
- Wird Ihr Guthaben knapp, erhalten Sie eine E-Mail; bei null werden Aufrufe mit 402 abgelehnt, bis Sie Guthaben aufladen.