Localeen-US
Scored dimensionsPronunciation · Completeness · Fluency · Rhythm
LevelsSentence · word · phoneme
InputAudio ≤ 30 s + reference text

The English pack returns an overall grade and four sentence-level dimensions — pronunciation, completeness, fluency and rhythm — then a score for every word and, underneath each word, the expected phoneme, the phoneme we estimate was said, and a score. The word carries the correction decision; phoneme rows are evidence to show the learner where the word went wrong.

Typical use

Reading practice, sentence drills, vocabulary flashcards with a "say it" step, and kids' read-aloud apps. Because every word has start_ms and end_ms, you can highlight a word and replay just that slice of the learner's recording.

Learner errors this pack is built to show

  • Vowel quality — ʌ / ɑ (sun / son vs father), ɪ / i (ship / sheep), æ / e (bad / bed).
  • Final consonant devoicing — bag heard as back — common for German, Russian and Turkish speakers.
  • θ / ð replaced by s / z or t / d (think, this).
  • r / l and v / w substitutions.
  • Dropped final consonants and reduced clusters (tests, asked), which also lower the completeness score.

Phoneme rows are evidence, not validated corrections: they show a learner where a word went wrong, while the word-level decision is what your app should act on.

Coverage notes

The pack is calibrated against native American English references. The rhotic vowel ɝ (as in bird) is outside the pack's phonetic coverage today, so words containing it are scored on their other sounds; the response marks any unassessed symbols. Lexical stress and intonation are not scored. The pack is labelled experimental: word decisions are validated, phoneme detail is evidence rather than a validated correction.

Example request

Reference text: I like sunny days. Send the recording, the text and the locale; nothing else is required.

cURL
curl https://api.toneperfect.app/v1/assess \
  -H "Authorization: Bearer $TONEPERFECT_API_KEY" \
  -H "Idempotency-Key: lesson-42-attempt-1" \
  -F "audio=@take.wav" \
  -F "text=I like sunny days" \
  -F "language=en-US"

What comes back

The same structure as every other language: sentence-level scores, a words[] array with timestamps and, under each word, phones[] with expected and heard values. Abbreviated to the one flagged word:

JSON (abbreviated)
{
  "language": "en",
  "locale": "en-US",
  "task": "scripted_speech",
  "status": "completed",
  "assessable": true,
  "model_version": "multilingual-native-v1-en-…",
  "scores": {
    "overall": 88,
    "pronunciation": 86,
    "completeness": 100,
    "fluency": 91,
    "rhythm": 87
  },
  "words": [
    {
      "word": "sunny",
      "expected_ipa": "sʌni",
      "score": 72,
      "start_ms": 1020,
      "end_ms": 1400,
      "decision": "review",
      "phones": [
        {
          "phone": "s",
          "expected": "s",
          "heard": "s",
          "score": 93,
          "diagnosis_status": "experimental"
        },
        {
          "phone": "ʌ",
          "expected": "ʌ",
          "heard": "ɑ",
          "score": 61,
          "diagnosis_status": "experimental"
        },
        {
          "phone": "n",
          "expected": "n",
          "heard": "n",
          "score": 89,
          "diagnosis_status": "experimental"
        },
        {
          "phone": "i",
          "expected": "i",
          "heard": "i",
          "score": 90,
          "diagnosis_status": "experimental"
        }
      ]
    }
  ],
  "billing": {
    "credits": 1,
    "balance_credits": 2499
  }
}

Reference text goes in as text: The English text the learner was asked to read, up to 40 words. See the response reference for every field.