Voizum

Text-to-Speech-API: deine Stimmen direkt aus deinem Code

Eine einfache REST-API: Du schickst einen Text und eine deiner Stimmen und bekommst das MP3 zurück. Es gelten dieselben Credits wie auf der Website, ohne Entwicklergebühr und ohne Kosten pro Aufruf.

Basis-URL
https://voizum.com/api/v1
Authentifizierung
Bearer sk_voizum_…
Ausgabe
MP3
Sprachen
es · en · de · fr · pt · it · ru
Preis
60 Credits / 1.000 Zeichen (min. 100)

Für KI-Assistenten und Tools

Drei Wege, je nachdem, wer sich verbindet. Alle führen zum Gleichen: deine Stimmen und deine Credits.

Claude, ChatGPT, Cursor… ohne Programmieren
Der MCP-Connector: Füge ihn dem Assistenten hinzu und fordere Audio im Chat an.
https://voizum.com/mcp
ChatGPT Actions, Postman, Client-Generatoren
Importiere die OpenAPI-3.1-Spezifikation: Sie beschreibt alle Endpunkte und ihre Felder.
https://voizum.com/openapi.json
Agenten, die Dokumentation lesen
llms.txt: der ganze Vertrag als Klartext, gemacht für Sprachmodelle.
https://voizum.com/llms.txt

In drei Schritten starten

  1. Erstelle dein Konto und deinen Schlüssel im API-Bereich der Website. Der Schlüssel beginnt mit sk_voizum_ und wird nur einmal angezeigt: Halte ihn geheim und bau ihn nie in Browser-Code ein.
  2. Wähle eine Stimme: Klone deine eigene oder füge eine aus der Stimmbibliothek zu „Meine Stimmen“ hinzu. GET /voices liefert ihre ID.
  3. Erstelle das Audio mit POST /tts, frage den Status alle paar Sekunden ab und lade es herunter, sobald es fertig ist (oder erhalte einen Webhook).

Ein vollständiges Beispiel

Erstellen, warten, herunterladen. Die API arbeitet asynchron: Ein langes Audio braucht Zeit, und so muss keine Verbindung offen bleiben.

curl

# 1. Create the audio
curl -X POST https://voizum.com/api/v1/tts \
  -H "Authorization: Bearer $VOIZUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Hi, this is Voizum.", "voice_id": "VOICE_ID"}'
# → {"job_id": "…", "status": "queued", "credits_charged": 100, "eta_seconds": 20}

# 2. Check the status (until "done")
curl https://voizum.com/api/v1/tts/JOB_ID -H "Authorization: Bearer $VOIZUM_API_KEY"

# 3. Download the MP3
curl -L -o audio.mp3 "https://voizum.com/api/v1/tts/JOB_ID/audio?download=1" -H "Authorization: Bearer $VOIZUM_API_KEY"

Python

import os, time, requests

API = "https://voizum.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['VOIZUM_API_KEY']}"}

job = requests.post(f"{API}/tts", headers=H, json={"text": "Hi, this is Voizum.", "voice_id": "VOICE_ID"}).json()
while True:
    status = requests.get(f"{API}/tts/{job['job_id']}", headers=H).json()
    if status["status"] in ("done", "error", "canceled"):
        break
    time.sleep(3)

if status["status"] == "done":
    mp3 = requests.get(f"{API}/tts/{job['job_id']}/audio?download=1", headers=H)
    open("audio.mp3", "wb").write(mp3.content)

JavaScript (Node 18+)

const API = "https://voizum.com/api/v1";
const H = { Authorization: `Bearer ${process.env.VOIZUM_API_KEY}`, "Content-Type": "application/json" };

const job = await (await fetch(`${API}/tts`, {
  method: "POST", headers: H,
  body: JSON.stringify({ text: "Hi, this is Voizum.", voice_id: "VOICE_ID" }),
})).json();

let status;
do {
  await new Promise((r) => setTimeout(r, 3000));
  status = await (await fetch(`${API}/tts/${job.job_id}`, { headers: H })).json();
} while (!["done", "error", "canceled"].includes(status.status));

if (status.status === "done") {
  const mp3 = await fetch(`${API}/tts/${job.job_id}/audio?download=1`, { headers: H });
  await (await import("node:fs/promises")).writeFile("audio.mp3", Buffer.from(await mp3.arrayBuffer()));
}

Endpunkte

Methode und PfadWas es macht
GET /statusStatus des Dienstes. Ohne Schlüssel.
GET /accountDein Credit-Guthaben und der Preis pro Zeichen.
GET /voicesDie Stimmen deiner Bibliothek: Ihre ID ist die voice_id.
POST /ttsErstellt ein Audio aus einem Text.
GET /tts/{job_id}Status des Audios: queued, processing, done, error oder canceled.
GET /tts/{job_id}/audioDas fertige MP3 (leitet auf die Datei weiter; ?download=1 zum Herunterladen).
DELETE /tts/{job_id}Bricht ein Audio ab, das noch nicht begonnen hat: Die Credits werden zurückerstattet.
GET /ttsDeine letzten Audios, seitenweise.
POST /tts/batchMehrere getrennte Audios in einer Anfrage, mit nur einem Mindestpreis (2 bis 100).
POST /tts/dialogueEin Audio mit mehreren Stimmen im Wechsel (bis zu 5 Stimmen).

Was POST /tts akzeptiert

FeldWas es ist
textPflicht. Der Text, bis zu 600.000 Zeichen.
voice_idPflicht. Eine Stimme aus deiner Bibliothek (GET /voices).
speedOptional. Geschwindigkeit, 0.5 bis 2 (1 = das natürliche Tempo der Stimme).
pause_msOptional. Pause zwischen Sätzen, 0 bis 800 ms.
languageOptional. auto, es, en, de, fr, pt, it, ru. Ohne Angabe wird die Sprache aus dem Text erkannt.
loudness_normalizationOptional. Gleicht die Lautstärke an, damit alle Stimmen gleich laut klingen.
webhook_urlOptional. Eine öffentliche https-URL, an die wir einen POST senden, wenn das Audio fertig ist.
Idempotency-KeyOptionaler Header. Wiederholst du die Anfrage mit demselben Wert, bekommst du dasselbe Audio und zahlst nicht doppelt.

Webhook

Mit webhook_url musst du nicht abfragen: Sobald das Audio fertig ist, senden wir einen POST mit dem Ereignis generation.finished (3 Versuche, je 10 s Timeout). Antwortet dein Server mit einem 4xx, gibt es keinen neuen Versuch.

Die Benachrichtigung ist nicht signiert: Nimm sie als Anlass, GET /tts/{job_id} mit deinem Schlüssel abzufragen, denn das ist die verlässliche Quelle, und nicht als Beweis, dass das Audio fertig ist.

{
  "event": "generation.finished",
  "id": "JOB_ID",
  "status": "completed",
  "voice_id": "VOICE_ID",
  "duration_seconds": 12.4,
  "credits": 100,
  "error": null
}

Limits

20 Erstellungen pro Minute (POST /tts, /tts/batch und /tts/dialogue teilen sich dieses Limit) und insgesamt 300 Anfragen pro Minute und Schlüssel. Antworten beim Erstellen enthalten X-RateLimit-Limit und X-RateLimit-Remaining, und jede 429 enthält Retry-After mit den Sekunden, die du warten musst.

Das MP3 wird 4 Tage gespeichert; danach liefert GET /tts/{job_id}/audio ein 404, lade es also herunter und bewahre es selbst auf.

Ein Audio darf bis zu 600.000 Zeichen lang sein. Ein Stapel umfasst 2 bis 100 Audios und insgesamt 1.200.000 Zeichen. Ein Dialog hat bis zu 100 Beiträge und 5 verschiedene Stimmen.

Fehler

Immer dieselbe Form: { "error": { "code", "message" } }, manchmal mit Details (zum Beispiel, wie viele Credits fehlen). Die Meldungen sind auf Englisch.

CodeHTTPWas passiert ist
no_autorizado401Missing or invalid API key.
parametros_invalidos400Missing fields or invalid values.
cuerpo_invalido400The body is not valid JSON.
texto_demasiado_largo400The text exceeds the character limit.
lote_invalido400A batch takes 2 to 100 items.
dialogo_invalido400A dialogue takes 2 to 100 turns and up to 5 voices.
webhook_invalido400webhook_url is not https or not a public host.
voz_sin_muestra400That voice can't be used yet.
saldo_insuficiente402Not enough credits (the response says how many are needed).
requiere_compra403Batches need an account that has bought credits.
voz_no_encontrada404The voice is not in your library.
no_encontrado404No job with that id (or it isn't yours).
limite_peticiones429Too many requests: wait for Retry-After.
demasiados_en_cola429Too many jobs in progress: wait for some to finish.
mantenimiento503Maintenance pause: retry later.
servicio_no_disponible503Service temporarily unavailable: retry.

Fragen

Gibt es ein SDK für Python oder JavaScript?
Du brauchst keins: Es sind ein paar REST-Aufrufe mit JSON, die mit jedem HTTP-Client funktionieren (requests, fetch, curl). Wenn du einen generierten Client möchtest, erzeugt ihn die OpenAPI-Spezifikation in deiner Sprache.
Gibt es Streaming in Echtzeit?
Nein. Die API arbeitet asynchron: Du erstellst das Audio, fragst den Status ab und lädst das fertige MP3 herunter. Sie ist für Erzählungen, Videos, Kurse und Inhalte gedacht, nicht für Live-Gespräche.
Kann ich die Stimmen der Bibliothek nutzen?
Ja: Füge sie vorher auf der Website zu „Meine Stimmen“ hinzu, dann erscheinen sie in GET /voices. Über die API werden nur die Stimmen deiner Bibliothek verwendet.
Kann ich eine Stimme über die API klonen?
Nein: Geklont wird auf der Website (du lädst die Aufnahme einmal hoch), danach nutzt du die Stimme über die API mit ihrer voice_id.
Was kostet das?
Dasselbe wie auf der Website: 60 Credits pro 1.000 Zeichen, mindestens 100 pro Anfrage. Keine Monatsgebühr und keine Kosten pro Aufruf. Schlägt ein Audio fehl, werden die Credits zurückerstattet.
In welchem Format kommt das Audio?
MP3.

Gib deinen Text ein und hör ihn mit einer echten Stimme

Die API verbraucht Credits aus einem Paket (60 pro 1.000 Zeichen) und verlangt die Anmeldung mit Google. Pakete ab 5,99 €, ohne Abo.