Localept-BR
Scored dimensionsPronunciation · Completeness
LevelsSentence · word · phoneme
InputAudio ≤ 30 s + reference text

The first thing a Portuguese learner gets wrong is não: the nasal diphthong collapses into English "now". The pt-BR pack expects the nasal vowel and reports what it estimates was said, so the feedback can say so. The same applies to ã, õe, lh, nh and the palatalised ti / di of Brazilian speech.

Dimensions

Pronunciation and completeness at sentence level, word scores and phoneme evidence. Fluency and rhythm are not scored for Portuguese today.

Learner errors this pack is built to show

  • Nasal vowels and diphthongs — não, mãe, bem — produced without nasality.
  • lh / nh produced as l + y / n + y.
  • Word-final -e and -o not raised to i and u (tarde, carro).
  • ti / di produced without Brazilian palatalisation (tʃi / dʒi).
  • The r family — initial and double rr as h-like, intervocalic r as a tap — swapped.

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

Nasalised glides are partly unassessed and marked as such in the response. In our September 2026 evaluation native controls scored a median of about 69 on this pack, so absolute scores run lower than in the other languages and learner score bands need improvement; compare learners to each other and to their own history rather than to a fixed pass mark. The pack is labelled experimental.

Example request

Reference text: Eu não falo português. 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=Eu não falo português" \
  -F "language=pt-BR"

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": "pt",
  "locale": "pt-BR",
  "task": "scripted_speech",
  "status": "completed",
  "assessable": true,
  "model_version": "multilingual-native-v1-pt-…",
  "scores": {
    "overall": 82,
    "pronunciation": 82,
    "completeness": 100
  },
  "words": [
    {
      "word": "não",
      "expected_ipa": "nɐ̃w̃",
      "score": 63,
      "start_ms": 600,
      "end_ms": 980,
      "decision": "review",
      "phones": [
        {
          "phone": "n",
          "expected": "n",
          "heard": "n",
          "score": 95,
          "diagnosis_status": "experimental"
        },
        {
          "phone": "ɐ̃w̃",
          "expected": "ɐ̃w̃",
          "heard": "aʊ",
          "score": 52,
          "diagnosis_status": "experimental"
        }
      ]
    }
  ],
  "billing": {
    "credits": 1,
    "balance_credits": 2499
  }
}

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