Developer API · Limited early access
✦ Launched Fall 2026

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.

Request
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"
Response — a child saying “rabbit” as “wabbit”
{
  "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.

A rough number changes what we can quote, not whether we reply.

ArticScore is in limited early access, rolled out case by case. We reply to every request.

ArticScore — frequently asked questions

What is ArticScore?
ArticScore is a pronunciation scoring API for children's speech. You send a recording plus the word or phrase the child was asked to say, and it returns a score from 0 to 100 for each individual phoneme, along with what the engine heard instead when a sound was wrong, an error type, and timing information for each sound.
How is ArticScore different from other pronunciation scoring APIs?
Mostly in what it is built and tuned for, rather than in being more accurate. The acoustic model is fine-tuned on children's speech rather than adapted from adult speech, which lowered false flags on correct productions relative to our own pre-fine-tuning baseline. Every flagged sound comes back with a candidate for what was produced instead and a clinical error type, rather than only a score. And we publish our accuracy measurements against human expert judgements — including the results that go against us — instead of a single headline number. We do not publish measurements of other companies' products, so we cannot tell you we are more accurate than any of them and will not imply it. Most established options in this category are mature, well engineered, and built for adult language learning; test several on your own audio before you decide.
Is ArticScore accurate enough to use without a speech-language pathologist?
No. Our own evaluation found that at the precision levels current systems achieve, most flags are false positives, and that on recordings of children with speech sound disorders the productions our engine scored as clean still included real errors a clinician caught. ArticScore is built for practice support and clinician triage — ranking which recordings to listen to first — not for unsupervised assessment.
Can ArticScore detect a lisp?
Only some kinds. An interdental lisp, where /s/ moves toward "th", sometimes surfaces as a substitution the engine can name. A lateral lisp is a distortion — the production is still an /s/ attempt and is not any other phoneme — and phoneme-based scoring cannot represent it. This limitation applies to every phoneme-scoring API we are aware of, not only ours, and we state it plainly rather than leaving it to be discovered in production.
What does ArticScore cost?
ArticScore is in limited early access and we do not publish pricing yet. Access is arranged directly so that we can understand your use case, your volume, and your child-privacy requirements before turning anything on. Request access and we will reply with specifics.
What languages and accents does ArticScore support?
American English is the evaluated and supported dialect today. The engine is scored against an American English lexicon, which matters for varieties of English where patterns like th-fronting or dark-/l/ vocalisation are standard rather than errors. If you serve another variety of English, tell us — it affects whether the default flags are meaningful for your users.