Integrieren Sie Aussprachebewertung in Ihre Anwendung mit unserer REST-API
Authentifizieren Sie Ihre Anfragen mit einem API-Schlüssel im Authorization-Header:
Authorization: Bearer lx_your_api_key_here⚠️ Schützen Sie Ihren API-Schlüssel: Geben Sie Ihren API-Schlüssel niemals im Client-Code oder in öffentlichen Repositories preis.
🔬 Präzision auf Silbenebene
Die V3 API bietet die tiefgreifendste verfügbare Ausspracheanalyse: Jedes Wort wird in einzelne Silben zerlegt — mit IPA-Transkription und Millisekunden-Timing, in 17 Sprachen.
/api/pronunciation/v3/checkSilbengenaue Aussprachebewertung mit Unterstützung für 17 Sprachen
✨ Betriebsmodi:
sentence-Parameter angeben → Bewertet Aussprache silbenweise anhand des eingegebenen Textssentence-Parameter weglassen → Whisper AI transkribiert zuerst die Sprache, dann wird die Aussprache bewertet| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| speechdata | file | Ja | Audiodatei (WAV, MP3, M4A, OGG, FLAC, WEBM). Maximal 10 MiB und 60 Sekunden; längere Aufnahmen werden mit Statuscode 400 abgelehnt. |
| sentence | string | Nein | Erwarteter Text zum Vergleich. Falls weggelassen, transkribiert Whisper zuerst die Sprache ("Freies Sprechen"-Modus). |
| language_code | string | Nein | Sprachcode (Standard: ja). Einer der 17 unten aufgeführten Codes. |
💡 Komprimiertes Audio senden
Kodieren Sie vor dem Upload clientseitig nach MP3, Opus/WebM oder AAC. Eine Aufnahme von 10 Sekunden belegt als WAV (16 kHz, mono) rund 320 KB, als Opus mit 64 kbit/s unter 40 KB. Die gleiche Bewertung bei einem Bruchteil der Upload-Zeit. Uploads über 10 MiB werden mit Statuscode 413 abgelehnt.
lingolix (PyPI) · @lingolix/sdk (npm)
Am besten setzen Sie den API-Schlüssel als Umgebungsvariable:
export LINGOLIX_API_KEY=your_api_key_here
# pip install lingolix (or: uv add lingolix)
from lingolix import Lingolix, QuotaExceededError
# WARNING: Keep API keys server-side only! Never expose in client-side code.
# Lingolix() reads $LINGOLIX_API_KEY. AsyncLingolix is the async twin.
with Lingolix() as client:
try:
# Bekannter-Text-Modus
r = client.check("audio.wav", sentence="Guten Morgen", language="de")
# Freies-Sprechen-Modus (sentence weggelassen)
# r = client.check("audio.wav", language="de")
print(r.overall, r.accuracy, r.fluency, r.speaking_rate)
for word in r.words:
for s in word.syllables:
print(s.text, s.expected_ipa, "→", s.detected_ipa, s.pitch, round(s.accuracy, 2))
except QuotaExceededError as e:
print(f"{e.plan} plan is out of minutes — upgrade at {e.upgrade_url}")Jedes Wort enthält ein syllables-Array mit IPA und Timing pro Silbe.
{
"text": "Guten Morgen",
"overall": 0.81,
"accuracy": 0.78,
"fluency": 1,
"completeness": 1,
"speaking_rate": 4.4,
"target_speaking_rate": 3,
"model_version": "2026-10",
"words": [
{
"text": "Guten",
"syllables": [
{
"text": "Gu",
"expected_ipa": "ɡuː",
"detected_ipa": "ɡuː",
"accuracy": 1,
"completeness": 1,
"pitch": "low",
"duration_ms": 200,
"start_ms": 300,
"end_ms": 500,
"is_missing": false,
"is_extra": false
},
{
"text": "ten",
"expected_ipa": "tn̩",
"detected_ipa": "tn̩",
"accuracy": 1,
"completeness": 1,
"pitch": "high",
"duration_ms": 200,
"start_ms": 520,
"end_ms": 720,
"is_missing": false,
"is_extra": false
}
],
"accuracy": 1,
"completeness": 1,
"start_ms": 300,
"end_ms": 720,
"char_start": 0,
"char_end": 5,
"hesitation_ms": null
},
{
"text": "Morgen",
"syllables": [
{
"text": "Mor",
"expected_ipa": "mɔʁ",
"detected_ipa": "ma",
"accuracy": 0.33,
"completeness": 0.67,
"pitch": "high",
"duration_ms": 200,
"start_ms": 760,
"end_ms": 960,
"is_missing": false,
"is_extra": false
},
{
"text": "gen",
"expected_ipa": "ɡn̩",
"detected_ipa": "ɡn̩",
"accuracy": 1,
"completeness": 1,
"pitch": "flat",
"duration_ms": 220,
"start_ms": 980,
"end_ms": 1200,
"is_missing": false,
"is_extra": false
}
],
"accuracy": 0.42,
"completeness": 1,
"start_ms": 760,
"end_ms": 1200,
"char_start": 6,
"char_end": 12,
"hesitation_ms": null
}
]
}Zeige overall als Bewertung; accuracy und fluency erklären sie, Wörter und Silben zeigen, wo.
| Field | Description |
|---|---|
| overall | Die anzuzeigende Bewertung (0,0 – 1,0): accuracy und fluency, gewichtet wie menschliche Bewerter sie gewichten. Immer vorhanden; gleich accuracy, wenn fluency null ist |
| accuracy | Wie gut die Laute ausgesprochen wurden (0,0 – 1,0) |
| fluency | Tempo und Pausen (0,0 – 1,0): volle Punktzahl ab target_speaking_rate, Abzug für jedes Zögern. null, wenn die Äußerung zu kurz zum Messen ist (unter 4 Silben) |
| completeness | Anteil der erwarteten Äußerung, der gesprochen wurde |
| speaking_rate | Silben (Japanisch: Moren) pro Sekunde, vom Beginn der ersten bis zum Beginn der letzten Silbe |
| target_speaking_rate | Tempo, ab dem fluency die volle Punktzahl gibt, in derselben Einheit: 60 % eines typischen muttersprachlichen Tempos der Sprache, damit Lernende Spielraum haben |
| model_version | Welches Modell und welche Bewertung diese Zahlen erzeugt haben, z. B. "2026-10". Ändert sich, wenn ein Update die Bewertungen verschiebt, damit gespeicherte Ergebnisse verschiedener Versionen unterscheidbar sind |
| Field | Description |
|---|---|
| text | Worttext |
| accuracy | Wie gut die Laute des Worts ausgesprochen wurden, gemessen am schwächsten Laut (0,0 – 1,0) |
| completeness | Anteil der erkannten Silben des Worts |
| start_ms | Startversatz in Millisekunden |
| end_ms | Endversatz in Millisekunden |
| char_start | Zeichenindex dieses Worts im text-Feld der Antwort. -1 bei Japanisch und bei zusätzlichen Wörtern, die nicht im erwarteten Text standen |
| char_end | Zeichenindex (exklusiv), an dem dieses Wort im text-Feld der Antwort endet. -1 unter denselben Bedingungen wie char_start |
| hesitation_ms | Pause vor oder in diesem Wort, in Millisekunden über der üblichen Lücke des Sprechers; null, wenn keine. Pausen an Satzzeichen zählen nie |
| Field | Description |
|---|---|
| text | Silbentext (z. B. "ni") |
| expected_ipa | Erwartete IPA-Transkription |
| detected_ipa | Erkannte IPA aus dem Audio |
| accuracy | Genauigkeit auf Phonem-Ebene (0,0 – 1,0) |
| completeness | Anteil der erkannten erwarteten Phoneme |
| pitch | Tonklasse: high | low | flat | unknown |
| duration_ms | Silbendauer in Millisekunden |
| start_ms | Startversatz in Millisekunden |
| end_ms | Endversatz in Millisekunden |
| is_missing | true, wenn die Silbe vom Benutzer ausgelassen wurde |
| is_extra | true, wenn etwas gesagt wurde, das nicht im Zieltext steht |
| Sprache | Code |
|---|---|
| 🇯🇵 Japanisch | ja |
| 🇬🇧 Englisch | en |
| 🇩🇪 Deutsch | de |
| 🇫🇷 Französisch | fr |
| 🇪🇸 Spanisch | es |
| 🇭🇺 Ungarisch | hu |
| 🇧🇬 Bulgarisch | bg |
| 🇨🇿 Tschechisch | cs |
| 🇬🇷 Griechisch | el |
| 🇫🇮 Finnisch | fi |
| 🇮🇹 Italienisch | it |
| 🇰🇷 Koreanisch | ko |
| 🇳🇱 Niederländisch | nl |
| 🇵🇱 Polnisch | pl |
| 🇵🇹 Portugiesisch | pt |
| 🇸🇪 Schwedisch | sv |
| 🇺🇦 Ukrainisch | uk |
Ihr monatliches Kontingent wird in Audiominuten gemessen und gilt für alle Ihre API-Schlüssel. Überprüfen Sie Ihre aktuelle Nutzung im Dashboard.
💡 Tipp: Überwachen Sie Ihre Nutzung regelmäßig, um unerwartete Kosten zu vermeiden. Erweitern Sie Ihren Tarif auf der Abo-Seite.
| Statuscode | Fehler | Lösung |
|---|---|---|
| 401 | Ungültiger oder fehlender API-Schlüssel | Überprüfen Sie Ihren Authorization-Header |
| 400 | Ungültiges Audioformat | Verwenden Sie WAV, MP3, M4A, OGG, FLAC oder WEBM-Format |
| 413 | Audiodatei zu groß | Uploads unter 10 MiB halten; statt WAV nach MP3/Opus kodieren |
| 429 | Kontingent überschritten | Tarif erweitern oder auf nächsten Abrechnungszeitraum warten |
| 503 | Dienst nicht verfügbar | Versuchen Sie es nach einer kurzen Verzögerung erneut |
Haben Sie Fragen oder benötigen Sie Unterstützung bei der Integration der API? Wir sind für Sie da!
Support kontaktieren