Pronunciation API Dokumentation

Integrieren Sie Aussprachebewertung in Ihre Anwendung mit unserer REST-API

Authentifizierung

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.

Endpunkt-Details

🔬 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.

POST/api/pronunciation/v3/check

Silbengenaue Aussprachebewertung mit Unterstützung für 17 Sprachen

✨ Betriebsmodi:

  • Vorgabe-Modus: sentence-Parameter angeben → Bewertet Aussprache silbenweise anhand des eingegebenen Texts
  • Freisprech-Modus: sentence-Parameter weglassen → Whisper AI transkribiert zuerst die Sprache, dann wird die Aussprache bewertet

Anfrageparameter

ParameterTypErforderlichBeschreibung
speechdatafileJaAudiodatei (WAV, MP3, M4A, OGG, FLAC, WEBM). Maximal 10 MiB.
sentencestringNeinErwarteter Text zum Vergleich. Falls weggelassen, transkribiert Whisper zuerst die Sprache ("Freies Sprechen"-Modus).
language_codestringNeinSprachcode (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.

V3 Codebeispiel

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

Antwortformat

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

Wortfelder

FieldDescription
textWorttext
accuracyMittlere Genauigkeit über die Silben des Worts (0,0 – 1,0)
completenessAnteil der erkannten Silben des Worts
start_msStartversatz in Millisekunden
end_msEndversatz in Millisekunden
char_startZeichenindex dieses Worts im text-Feld der Antwort. -1 bei Japanisch und bei zusätzlichen Wörtern, die nicht im erwarteten Text standen
char_endZeichenindex (exklusiv), an dem dieses Wort im text-Feld der Antwort endet. -1 unter denselben Bedingungen wie char_start

Silbenfelder

FieldDescription
textSilbentext (z. B. "ni")
expected_ipaErwartete IPA-Transkription
detected_ipaErkannte IPA aus dem Audio
accuracyGenauigkeit auf Phonem-Ebene (0,0 – 1,0)
completenessAnteil der erkannten erwarteten Phoneme
pitchTonklasse: high | low | flat | unknown
duration_msSilbendauer in Millisekunden
start_msStartversatz in Millisekunden
end_msEndversatz in Millisekunden
is_missingtrue, wenn die Silbe vom Benutzer ausgelassen wurde
is_extratrue, wenn etwas gesagt wurde, das nicht im Zieltext steht

Unterstützte Sprachen (17 insgesamt)

SpracheCode
🇯🇵 Japanischja
🇬🇧 Englischen
🇩🇪 Deutschde
🇫🇷 Französischfr
🇪🇸 Spanisches
🇭🇺 Ungarischhu
🇧🇬 Bulgarischbg
🇨🇿 Tschechischcs
🇬🇷 Griechischel
🇫🇮 Finnischfi
🇮🇹 Italienischit
🇰🇷 Koreanischko
🇳🇱 Niederländischnl
🇵🇱 Polnischpl
🇵🇹 Portugiesischpt
🇸🇪 Schwedischsv
🇺🇦 Ukrainischuk
💡 Zahlen, Datums- und Währungsangaben werden für Englisch, Deutsch, Französisch und Spanisch automatisch ausgeschrieben. Andere Sprachen werden wie geschrieben bewertet.

Ratenlimits & Kontingente

Kontingentsystem

Ihr monatliches Kontingent wird in Audiominuten gemessen und gilt für alle Ihre API-Schlüssel. Überprüfen Sie Ihre aktuelle Nutzung im Dashboard.

Kostenloser Tarif

  • 15 Minuten pro Monat
  • Hartes Limit - Anfragen werden blockiert, wenn das Kontingent erschöpft ist
  • Gibt 429-Fehler zurück, wenn das Kontingent überschritten wird

Bezahlte Tarife

  • Höhere Monatskontingente (180 Min. – 13.200 Min. je nach Tarif)
  • Mehrverbrauch erlaubt mit minutengenauer Abrechnung
  • Mehrverbrauchspreise: 0,02 € - 0,05 € pro Minute je nach Tarif

💡 Tipp: Überwachen Sie Ihre Nutzung regelmäßig, um unerwartete Kosten zu vermeiden. Erweitern Sie Ihren Tarif auf der Abo-Seite.

Fehlerbehandlung

StatuscodeFehlerLösung
401Ungültiger oder fehlender API-SchlüsselÜberprüfen Sie Ihren Authorization-Header
400Ungültiges AudioformatVerwenden Sie WAV, MP3, M4A, OGG, FLAC oder WEBM-Format
413Audiodatei zu großUploads unter 10 MiB halten; statt WAV nach MP3/Opus kodieren
429Kontingent überschrittenTarif erweitern oder auf nächsten Abrechnungszeitraum warten
503Dienst nicht verfügbarVersuchen Sie es nach einer kurzen Verzögerung erneut

Brauchen Sie Hilfe?

Haben Sie Fragen oder benötigen Sie Unterstützung bei der Integration der API? Wir sind für Sie da!

Support kontaktieren