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 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:
{
"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.