API για προγραμματιστές

Ζωντανή μετάφραση για το δικό σας προϊόν

Ένα API για ζωντανή μετάφραση φωνής, μετάφραση κειμένου, ομιλία και βίντεο σε 32 γλώσσες. Προπληρωμένη πίστωση, πληρώνετε μόνο ό,τι χρησιμοποιείτε, χωρίς μηνιαία χρέωση.

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

Πόσο κοστίζει

Κάθε κλήση πληρώνεται από το προπληρωμένο υπόλοιπό σας. Μια κλήση που αποτυγχάνει από τη δική μας πλευρά δεν χρεώνεται.

Ζωντανή μετάφραση φωνής
Στείλτε ομιλία σε ροή και λάβετε πίσω μεταφρασμένους υπότιτλους και μεταφρασμένη φωνή μέσα σε δευτερόλεπτα.
0,10 $ ανά λεπτό
Ζωντανοί υπότιτλοι
Η ίδια ζωντανή ροή, μόνο με μεταφρασμένους υπότιτλους.
0,05 $ ανά λεπτό
Μετάφραση κειμένου
Φυσική μετάφραση που λαμβάνει υπόψη τα συμφραζόμενα, για ένα κείμενο ή έως 50.
10,00 $ ανά 1 εκατ. χαρακτήρες
Κείμενο σε ομιλία
Κείμενο που διαβάζεται δυνατά με φυσική φωνή, σε MP3, WAV ή Opus.
30,00 $ ανά 1 εκατ. χαρακτήρες
Ομιλία σε κείμενο
Ήχος ή βίντεο σε κείμενο με χρονοσφραγίδες, προαιρετικά μεταφρασμένο.
0,01 $ ανά λεπτό
Υπότιτλοι βίντεο
Το βίντεο πίσω με ενσωματωμένους μεταφρασμένους υπότιτλους, μαζί με αρχεία SRT.
0,20 $ ανά λεπτό
Μεταγλώττιση βίντεο
Το βίντεο πίσω σε άλλη γλώσσα, με υπότιτλους αν θέλετε.
0,50 $ ανά λεπτό

Έλεγχος ταυτότητας

Κάθε αίτημα περιέχει το κλειδί API σας στην κεφαλίδα Authorization. Τα κλειδιά δημιουργούνται και ανακαλούνται στον πίνακα ελέγχου· όλα ξοδεύουν από το ίδιο υπόλοιπο.

  1. Εγγραφείτε δωρεάν στο sponkly.com και ανοίξτε Πίνακας ελέγχου → API για προγραμματιστές.
  2. Προσθέστε πίστωση (από $10) και δημιουργήστε ένα κλειδί API.
  3. Στείλτε αιτήματα στο https://api.sponkly.com/v1 με Authorization: Bearer <your key>.
Base URL:      https://api.sponkly.com/v1
Authorization: Bearer spk_…

Υπογεγραμμένα αιτήματα

Κάθε κλειδί API συνοδεύεται από ένα μυστικό υπογραφής. Όταν υπογράφετε τα αιτήματά σας με αυτό, ένα κλεμμένο κλειδί από μόνο του είναι άχρηστο, ένα αίτημα δεν μπορεί να αλλοιωθεί στη διαδρομή και το ίδιο αίτημα δεν μπορεί να σταλεί δύο φορές. Ενεργοποιήστε την επιλογή «Απαίτηση υπογεγραμμένων αιτημάτων» για το κλειδί στον πίνακα ελέγχου και κάθε μη υπογεγραμμένο αίτημα θα απορρίπτεται.

  1. Πάρτε την τρέχουσα ώρα σε δευτερόλεπτα Unix και το SHA-256 του ακριβούς σώματος που στέλνετε (για αποστολή αρχείου: τα bytes του αρχείου· για GET και το live socket: κενό σώμα).
  2. Ενώστε τα με τελείες, με αυτή τη σειρά: χρονοσήμανση, μέθοδος, διαδρομή μαζί με το query string και το hash του σώματος.
  3. Υπολογίστε ένα HMAC-SHA256 αυτού του κειμένου με το μυστικό υπογραφής σας, σε δεκαεξαδική μορφή με πεζά.
  4. Στείλτε το ως X-Sponkly-Signature: v1=<signature>, με την ώρα ως X-Sponkly-Timestamp. Μια υπογραφή ισχύει για 5 λεπτά και για ένα μόνο αίτημα.
  5. Στέλνετε το ίδιο αίτημα δύο φορές μέσα σε ένα δευτερόλεπτο (γρήγορη επανάληψη ή περιοδικός έλεγχος); Δώστε τον χρόνο σε χιλιοστά του δευτερολέπτου· γίνεται επίσης δεκτός και κάθε υπογραφή μένει μοναδική.
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" }));

Προστατέψτε τα κλειδιά σας

  • Καλείτε το API από τον διακομιστή σας. Μην βάζετε ποτέ κλειδί ή μυστικό υπογραφής σε ιστοσελίδα, εφαρμογή για κινητά ή δημόσιο αποθετήριο.
  • Απαιτήστε υπογεγραμμένα αιτήματα για κάθε κλειδί στην παραγωγή.
  • Προσθέστε τις διευθύνσεις των διακομιστών σας στις επιτρεπόμενες διευθύνσεις του κλειδιού, ώστε να μη λειτουργεί από πουθενά αλλού.
  • Ορίστε ημερήσιο όριο δαπανών ανά κλειδί, ώστε ένα λάθος ή μια διαρροή να έχει περιορισμένο κόστος.
  • Χρησιμοποιείτε ένα κλειδί ανά εφαρμογή ή περιβάλλον και ανακαλέστε ένα κλειδί μόλις υποψιαστείτε ότι εκτέθηκε. Μπορείτε επίσης να δημιουργήσετε νέο μυστικό υπογραφής ανά πάσα στιγμή.
  • Επανειλημμένα λάθος κλειδιά ή υπογραφές από μία διεύθυνση κλειδώνουν αυτή τη διεύθυνση για 15 λεπτά.
POST/v1/translate

Μετάφραση κειμένου

Μεταφράζει ένα κείμενο ή μια λίστα έως 50 σε οποιαδήποτε από τις 32 γλώσσες. Παραλείψτε τη γλώσσα προέλευσης για να εντοπιστεί αυτόματα.

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

Πεδία: text (συμβολοσειρά ή πίνακας), target (κωδικός γλώσσας), source (προαιρετικό), context (προαιρετικό, έως 1.000 χαρακτήρες που εξηγούν τι αφορά το κείμενο). Πληρώνετε ανά χαρακτήρα που στέλνετε.

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

Ζωντανή μετάφραση φωνής

Ένα WebSocket για ζωντανή ομιλία: στείλτε τον ήχο την ώρα που μιλά κάποιος και λάβετε μεταφρασμένους υπότιτλους και, αν το ζητήσετε, μεταφρασμένη φωνή. Δεκατρείς μεγάλες γλώσσες μεταφράζονται από μοντέλο ομιλίας πραγματικού χρόνου με καθυστέρηση περίπου 1–2 δευτερολέπτων· οι υπόλοιπες από τη δική μας διαδικασία ροής.

// 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.
Μήνυμα από τον διακομιστήΤι σημαίνει
{"t":"ready","engine":"openai|own"}Η συνεδρία άνοιξε· το engine δείχνει ποια διαδρομή μετάφρασης εξυπηρετεί αυτή τη γλώσσα.
{"t":"partial","text":"…"}Η ομιλία που αναγνωρίζεται αυτή τη στιγμή (μπορεί ακόμη να αλλάξει).
{"t":"cap","id","text","done"}Μια μεταφρασμένη γραμμή: εμφανίζεται καθώς μεγαλώνει και είναι οριστική όταν το done είναι true.
{"t":"pcm","d":"<base64>","r":24000}Ένα κομμάτι της μεταφρασμένης φωνής: 16-bit mono PCM στον δεδομένο ρυθμό δειγματοληψίας, σε base64. Αναπαράγετε τα κομμάτια το ένα μετά το άλλο.
{"t":"problem","text":"noMinutes"}Το υπόλοιπό σας τελείωσε· η συνεδρία κλείνει.

Παράμετροι: source και target (κωδικοί γλώσσας), voice=0 μόνο για υπότιτλους (μισή τιμή). Στέλνετε τον ήχο σε πραγματικό χρόνο (ταχύτερη αποστολή απορρίπτεται). Έως 10 ταυτόχρονες συνεδρίες ανά λογαριασμό, 2 ώρες η καθεμία. Πληρώνετε ανά δευτερόλεπτο μεταφρασμένης ομιλίας· η σιωπή και η μουσική είναι δωρεάν.

POST/v1/speech

Κείμενο σε ομιλία

Μετατρέπει κείμενο σε φυσική ομιλία και επιστρέφει το ίδιο το αρχείο ήχου.

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

Πεδία: text (έως 4.096 χαρακτήρες), language, voice (female, male, neutral ή alloy, ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse), format (mp3, wav ή opus), speed (0.5–2). Το κόστος βρίσκεται στην κεφαλίδα X-Sponkly-Cost-Usd.

POST/v1/transcribe

Ομιλία σε κείμενο

Ανεβάστε ένα αρχείο ήχου ή βίντεο (έως 25 MB και 60 λεπτά)· λάβετε το κείμενο με χρονοσφραγίδες και τη μετάφρασή του, αν τη ζητήσετε.

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

Υπότιτλοι και μεταγλώττιση βίντεο

Στείλτε ένα βίντεο έως 5 λεπτών και πάρτε το πίσω μεταφρασμένο: με ενσωματωμένους υπότιτλους, με μεταφρασμένη φωνή ή και τα δύο, μαζί με αρχεία υποτίτλων και στις δύο γλώσσες.

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

Πεδία: target, source (προαιρετικό), dub (true για μεταφρασμένη φωνή), subtitles (translated, original, both ή none), content_type (video/mp4 ή video/quicktime), size_bytes, title (προαιρετικό). Πληρώνετε ανά δευτερόλεπτο βίντεο μόλις γίνει γνωστή η διάρκειά του. Τα αποτελέσματα μπορούν να ληφθούν για 7 ημέρες.

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

Υπόλοιπο, χρήση και γλώσσες

Δείτε το υπόλοιπό σας και πότε λήγει η παλαιότερη πίστωσή σας, εμφανίστε τις χρεωμένες κλήσεις σας και λάβετε τις γλώσσες και τις τρέχουσες τιμές.

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 }

Σφάλματα

Τα σφάλματα επιστρέφονται ως JSON με σταθερό κωδικό και ευανάγνωστο μήνυμα.

{ "error": { "code": "insufficient_balance", "message": "…" } }
400invalid_text · invalid_target · text_too_long …Κάτι στο αίτημα λείπει ή δεν επιτρέπεται· το μήνυμα λέει τι.
401missing_key · invalid_keyΔεν υπάρχει κλειδί API ή το κλειδί είναι λάθος ή έχει ανακληθεί.
402insufficient_balanceΤο υπόλοιπό σας δεν καλύπτει αυτή την κλήση. Προσθέστε πίστωση στον πίνακα ελέγχου.
429—Πάρα πολλά αιτήματα ταυτόχρονα. Περιμένετε λίγο και δοκιμάστε ξανά.
502translation_failed · speech_failed …Η αποτυχία έγινε από τη δική μας πλευρά ή σε κάποιον πάροχο. Δεν χρεωθήκατε· δοκιμάστε ξανά.

Όρια

  • Μετάφραση κειμένου: έως 50 κείμενα και 20.000 χαρακτήρες ανά αίτημα, 5.000 ανά κείμενο.
  • Κείμενο σε ομιλία: έως 4.096 χαρακτήρες ανά αίτημα.
  • Ομιλία σε κείμενο: αρχεία έως 25 MB και 60 λεπτά.
  • Ζωντανή μετάφραση: έως 10 ταυτόχρονες συνεδρίες ανά λογαριασμό, 2 ώρες η καθεμία, ήχος σε πραγματικό χρόνο.
  • Βίντεο: έως 5 λεπτά και 4 GB, 3 σε επεξεργασία ταυτόχρονα· τα αποτελέσματα διατηρούνται 7 ημέρες.
  • Όρια ανά κλειδί και λεπτό: 300 μεταφράσεις, 120 συνθέσεις ομιλίας, 60 απομαγνητοφωνήσεις και 20 νέα βίντεο.
  • 32 γλώσσες: αγγλικά, τουρκικά, γερμανικά, γαλλικά, ισπανικά, ιταλικά, πορτογαλικά, ρωσικά, ιαπωνικά, κορεατικά, κινεζικά, αραβικά, χίντι, ολλανδικά, πολωνικά, σουηδικά, νορβηγικά, δανικά, φινλανδικά, ελληνικά, τσεχικά, ρουμανικά, ουγγρικά, ουκρανικά, εβραϊκά, ταϊλανδικά, βιετναμικά, ινδονησιακά, μαλαϊκά, εσθονικά, περσικά και καταλανικά.

Χρέωση

  • Προπληρωμή: προσθέστε πίστωση με κάρτα από $10· κάθε κλήση αφαιρείται από το υπόλοιπό σας.
  • Η χρέωση επεξεργασίας της κάρτας εμφανίζεται και προστίθεται κατά την πληρωμή, ώστε να μπορείτε να χρησιμοποιήσετε ολόκληρη την πίστωσή σας.
  • Η πίστωση μπορεί να χρησιμοποιηθεί για 12 μήνες μετά την αγορά. Δεν επιστρέφεται.
  • Μια κλήση που αποτυγχάνει από τη δική μας πλευρά δεν χρεώνεται, και το ποσό ενός βίντεο που αποτυγχάνει επιστρέφεται.
  • Όταν το υπόλοιπό σας είναι χαμηλό, σας στέλνουμε email· στο μηδέν, οι κλήσεις απορρίπτονται με 402 μέχρι να προσθέσετε πίστωση.