ArticScore — the articulation scoring API for children's speech, by SpeechTherapyMagic
Send a recording and the word a child was asked to say. Get back a score for every individual sound, what the engine heard instead when a sound was wrong, and whether that error was a substitution or an omission — the per-phoneme detail a speech therapy or literacy product needs, from an engine tuned on children's voices rather than adapted from adult speech.
What ArticScore returns
One request, one response. You post the audio and the target text; the API handles phoneme conversion, alignment, and scoring, and returns a row for every sound in the word.
curl -X POST https://api.speechtherapymagic.com/articscore/v1/score \
-H "Authorization: Bearer $ARTICSCORE_KEY" \
-F "audio=@rabbit.wav" \
-F "text=rabbit" \
-F "dialect=en-us"{
"engine": "articscore",
"model": "ft-epoch3",
"text": "rabbit",
"overall_score": 61.4,
"words": [
{
"word": "rabbit",
"score": 61.4,
"phonemes": [
{
"phone": "R",
"phone_ipa": "ɹ",
"score": 41.2,
"sound_most_like": "W",
"sound_most_like_ipa": "w",
"extent": [120, 260],
"flagged": true,
"error_type": "substitution",
"tier": "flag"
},
{
"phone": "AE",
"phone_ipa": "æ",
"score": 88.1,
"extent": [260, 390],
"flagged": false,
"tier": "clean"
},
{
"phone": "B",
"phone_ipa": "b",
"score": 94.0,
"extent": [390, 455],
"flagged": false,
"tier": "clean"
},
{
"phone": "IH",
"phone_ipa": "ɪ",
"score": 79.6,
"extent": [455, 540],
"flagged": false,
"tier": "clean"
},
{
"phone": "T",
"phone_ipa": "t",
"score": 90.3,
"extent": [540, 620],
"flagged": false,
"tier": "clean"
}
]
}
],
"timing": { "inference_s": 1.12, "total_s": 1.31 }
}The row that matters is the first one. The /ɹ/ scored 41.2, the engine names W as what it heard over that span, and it classifies the error as a substitution— which is gliding, one of the most common patterns in children's speech. An application can turn that into “the R in rabbit came out as a W” rather than “try again”.
In a game
3 of 5 stars
rabbit
R /ɹ/ · 41.2
That R came out as a W. Put your tongue up and back — don’t let your lips round.
Stars are derived from overall_score: one star per 20 points, rounded — 61.4 gives 3 of 5. The coaching sentence is copy the product writes from sound_most_like (W) and error_type (substitution). The API does not return a coaching string.
One way this response could look in your product— the API returns the data, you own the experience. Every phone, score, substitute and tier above is read straight from the sample response for rabbit; the layouts, the star rule, the colour bands and the coaching sentence are things a product decides, not fields the API sends back.
Three things ArticScore is built around
These are design choices, not accuracy claims. Each one is scoped to what we have actually measured, and the sample it was measured on is stated with it.
Tuned on children's voices rather than adapted from adult speech
The acoustic model is fine-tuned on 12.5 hours of child speech from 531 child speakers. Measured against our own pre-fine-tuning baseline on our internal evaluation set, the false-flag rate on correctly produced sounds moved from 8.0% to 6.5% at identical recall. That is our engine compared with an earlier version of itself on one sample — not a comparison with any other product.
It names what it heard instead, not just that something was wrong
Every flagged phoneme comes back with the engine's best candidate for what was actually produced, plus an error type — substitution, omission, or distortion. That is the vocabulary a clinical note is written in, and it is what turns a score into something a therapist can act on.
A published benchmark, with its limitations attached
We publish our per-phoneme agreement with five human phoneticians on a named public corpus, with the method, the sample sizes, the confidence intervals and the tables where the result went against us. That includes the uncomfortable ones: at every operating point we measured, most individual flags are false positives, which is why we describe the engine as a ranking and practice-feedback layer rather than an assessment.
What ArticScore cannot do
Three limits apply to every engine in this category, ours included. They decide what you can build, so they belong here rather than in your second sprint.
Request access
ArticScore is in limited early access, rolled out case by case. Fill in your use case and expected volume below and we will come back to you with specifics.
ArticScore — frequently asked questions
What is ArticScore?
How is ArticScore different from other pronunciation scoring APIs?
Is ArticScore accurate enough to use without a speech-language pathologist?
Can ArticScore detect a lisp?
What does ArticScore cost?
What languages and accents does ArticScore support?
Explore ArticScore
What the API returns
Field-by-field reference for the scoring response.
Accuracy benchmark
Our measurements against five human phoneticians, with caveats.
Access and pricing
How early access works and what we need to know.
Children's privacy and COPPA
What COPPA requires when you record a child's voice.
Choosing a pronunciation scoring API
What to test for, and how to run the comparison on your own audio.
For speech therapy apps
What per-phoneme scoring changes in a therapy product.
For reading and literacy apps
Decoding accuracy at the level of individual sounds.
Phonological processes
Fronting, gliding, stopping, and how each is detected.
Sound-by-sound scoring notes
How /r/, /s/, /l/ and "th" behave under automatic scoring.
Glossary
GOP, forced alignment, phoneme scoring, and more.