---
title: "Grammar Check"
method: POST
path: "/bot/grammar-check"
tags: ["bot", "bot"]
---

# Grammar Check

`POST /bot/grammar-check`

The Improve / sparkle button: check one sentence and explain it.

This endpoint and the correction underline are ONE analysis
(correction_core.check_text), rendered twice. Nancy, 2026-09-12: "This is
basically the improve button but run on every single message." The button
draws `improved_text` + `explanation` + `tips`; the underline draws the
same call's `items`, one span per mistake. Neither can drift from the
other, because there is only one prompt and one schema.

The response keys are unchanged from the hand-written version this replaced
(improved_text / explanation / corrections / suggestions), so every caller
- MessageBubble, MessageSparkleCheck, CallChatBox, DailyPopup, the AI voice
panel - renders exactly what it rendered before.

## Headers

- `authorization` string, nullable

## Request body

- GrammarCheckRequest
  - `text` string, required
  - `language` string, required
  - `native_language` string, nullable
  - `context` object[], nullable
  - `is_spoken` boolean, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored.md) · [All operations](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/llms.txt) · [OpenAPI document](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/revisions/13996d792e23?raw)
