Pangram checker
Check whether a sentence uses all 26 letters from A to Z: The quick brown fox jumps over the lazy dog passes, and any text that falls short gets its missing letters listed in alphabetical order. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
A pangram contains every letter from A through Z at least once. This checker examines any sentence, paragraph, label, or test string and tells you whether it qualifies. When it does not, the result lists each missing letter in alphabetical order, so you can revise the text without guessing. Capitalization does not matter, and spaces, numbers, punctuation, emoji, and other non-letter characters are ignored. The check is deterministic and runs without a dictionary, language model, or network request.
What the pangram result means
A pangram is a piece of writing that uses all 26 letters of the English alphabet at least once. A true result therefore has an empty missing-letter list, while a false result shows exactly what prevents the text from qualifying. Repeated letters do not change the decision, because every letter only needs to occur once.
The test is case-insensitive, so uppercase Q and lowercase q satisfy the same requirement. This definition focuses specifically on the standard English alphabet. It does not try to decide whether the input is grammatical, meaningful, elegant, or a perfect pangram in which every letter appears exactly once.
Those are separate writing questions. This clear, mechanical definition makes the output useful in automated tests as well as quick manual checks.
How text is normalized and checked
The algorithm scans the supplied string and records whether each English letter from a to z has appeared. Before comparison, letter case is normalized, which makes mixed-case headings and all-capital samples behave the same as ordinary sentences. Characters outside the ASCII English letter ranges are ignored.
That includes whitespace, line breaks, digits, quotation marks, hyphens, symbols, and emoji. Accented characters are not silently converted into their unaccented counterparts: an accented e is ignored rather than counted as e. The missing list is then built in alphabetical order from the letters that were never recorded.
The implementation is deterministic, uses no network or stored state, and can stop scanning early after all 26 letters have been found. Very long strings still take time proportional to the portion inspected, while the tracking storage remains fixed at 26 positions.
Using missing letters to improve text and tests
Paste a candidate sentence into the text field and inspect both parts of the response. If the pangram flag is false, use the missing list as a focused editing checklist. Adding a word that contains several missing letters is usually more readable than inserting isolated characters.
Designers can use this process when preparing font specimens, keyboard demonstrations, engraving previews, or layouts that need broad alphabet coverage. The ordered missing list gives a stable value that is easy to compare in a test assertion and easy to show in an interface. Remember that the checker measures coverage, not literary quality: a nonsensical sequence containing every letter is still a pangram, and a beautiful sentence missing one rare letter is not.
What you can do with it
Validate font specimen text
Confirm that a type sample exposes every English letter before using it to compare glyph shapes.
Build a writing exercise
Show learners precisely which letters their candidate pangram still needs instead of returning only pass or fail.
Test generated display copy
Add a deterministic assertion to a content pipeline and retain the missing-letter list for useful failure reports.
FAQ
What counts as a pangram?
Any string containing every letter from A through Z at least once counts, regardless of meaning or repeated letters.
Does capitalization matter?
No. The check is case-insensitive, so uppercase and lowercase forms of an English letter are equivalent.
What happens to punctuation and numbers?
They are ignored, along with spaces, emoji, and other characters outside the English A–Z alphabet.
Are accented letters converted to plain letters?
No. Accented characters are ignored rather than transliterated, which keeps the English alphabet rule explicit and predictable.
In what order are missing letters returned?
Missing letters are always returned in alphabetical order from a through z.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/text/pangram-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"The quick brown fox jumps over the lazy dog."}'const res = await fetch("https://api.kit.forhosting.com/text/pangram-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "The quick brown fox jumps over the lazy dog."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/pangram-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "The quick brown fox jumps over the lazy dog."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/pangram-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"The quick brown fox jumps over the lazy dog."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"The quick brown fox jumps over the lazy dog."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/pangram-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "The quick brown fox jumps over the lazy dog."
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.pangram_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_tokens | 20000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What the pangram result means
The checker returns an is_pangram value that is true only when A through Z are all present. It also returns missing_letters, an alphabetically ordered list of letters that never appeared.
How text is normalized and checked
This behavior keeps the contract precise and avoids language-dependent transformations that could surprise an API client. The same pure solving function supports both browser and API execution.
Using missing letters to improve text and tests
Browser execution is available for an immediate check, while automated requests use the published base price of $0.002 per item.
Technical questions
How much does the API check cost?
Each API request costs $0.002. The browser version can run locally for free.