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. |
| 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.accuracy, r.completeness, 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. speaking_rate wird in Teilwörtern (Silben) pro Sekunde gemessen.
{
"text": "Guten Morgen",
"speaking_rate": 12.5,
"accuracy": 0.7777777910232544,
"completeness": 1,
"words": [
{
"text": "Guten",
"syllables": [
{
"text": "Gu",
"expected_ipa": "ɡuː",
"detected_ipa": "ɡu",
"accuracy": 1,
"completeness": 1,
"pitch": "low",
"duration_ms": 60,
"start_ms": 20,
"end_ms": 40,
"is_missing": false,
"is_extra": false
},
{
"text": "ten",
"expected_ipa": "tn̩",
"detected_ipa": "tn",
"accuracy": 1,
"completeness": 1,
"pitch": "high",
"duration_ms": 100,
"start_ms": 70,
"end_ms": 110,
"is_missing": false,
"is_extra": false
}
],
"accuracy": 1,
"completeness": 1,
"start_ms": 20,
"end_ms": 110,
"char_start": 0,
"char_end": 5
},
{
"text": "Morgen",
"syllables": [
{
"text": "Mor",
"expected_ipa": "mɔʁ",
"detected_ipa": "ma",
"accuracy": 0.3333333134651184,
"completeness": 0.6666666666666667,
"pitch": "high",
"duration_ms": 60,
"start_ms": 160,
"end_ms": 180,
"is_missing": false,
"is_extra": false
},
{
"text": "gen",
"expected_ipa": "ɡn̩",
"detected_ipa": "ɡn",
"accuracy": 1,
"completeness": 1,
"pitch": "flat",
"duration_ms": 100,
"start_ms": 220,
"end_ms": 260,
"is_missing": false,
"is_extra": false
}
],
"accuracy": 0.6000000238418579,
"completeness": 0.5,
"start_ms": 160,
"end_ms": 260,
"char_start": 6,
"char_end": 12
}
]
}| Field | Description |
|---|---|
| text | Worttext |
| accuracy | Mittlere Genauigkeit über die Silben des Worts (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 |
| 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