English word singularizer
Turn an English plural into its singular: cities becomes city, children becomes child and sheep stays sheep. Capitalization is kept, so Users becomes User, which suits naming a type after a table or a list. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- cities
- Word
- cities
- Singular
- city
- Rule
- ies_to_y
You send one word—cities, children, boxes, or a hyphenated compound such as mothers-in-law—and the solver applies a fixed irregular map, an uncountable list, and ordered suffix rules for ies, ves, es, and s. Case is preserved so Users becomes User and CHILDREN becomes CHILD. Already-singular or invariant nouns such as sheep and news are returned unchanged instead of being stripped into nonsense.
How English plurals become singulars
English pluralization is mostly regular and still full of traps that break naive string chops. A final s is often just a suffix (cats to cat, users to user), but boxes, churches, dishes, and buses take es after a sibilant, cities and queries replace ies with y after a consonant, and knives or wolves replace ves with fe or f. A handful of everyday nouns ignore those patterns entirely: children, men, women, people, mice, geese, feet, teeth, and oxen must be looked up.
Some words never change in the plural: sheep, series, species, deer, fish, aircraft, and news stay as they are, so stripping s would invent shee or new. This capability encodes that split as a deterministic pipeline: normalize case for lookup, hit the irregular table, hit the uncountable table, then walk a first-match suffix list from the most specific pattern to a final drop of a lone s. Short ies words such as ties and pies become tie and pie instead of ty and py.
Hyphenated compounds singularize the first element, which is how English treats mothers-in-law and passers-by. The inverse of a typical pluralizer is therefore not a single regex; it is a small, ordered grammar that a code generator can call on every identifier without network access or a dictionary service.
Where a noun singularizer earns its keep
Code generators and ORMs constantly invert collection names: a route /users wants a User type, a table orders wants an Order model, and a GraphQL users field wants a User node. Doing that with a one-line replace of a trailing s mis-handles categories, companies, children, people, and sheep, and those bugs show up as class names nobody wanted.
Localization and content tools use the same mapping when a UI string says N items and the one-item copy must switch to item, or when a glossary lists lemmas next to inflected forms. Teachers and linguistics demos can show regular versus irregular English without standing up a natural-language stack. For identifier inflection, collection-to-type mapping, and glossary cleanup, a fixed rule table plus common irregulars is the right size of tool.
What you can do with it
ORM and code-generation identifiers
Turn collection or table names such as Users, categories, and children into User, category, and child before emitting types or model files.
Glossary and UI copy lemmas
Reduce plural glossary entries and count-dependent labels to a stable singular lemma for dictionaries and one-item copy.
FAQ
Which irregular plurals are supported?
Common ones such as children, men, women, people, mice, geese, feet, teeth, oxen, and frequent Latin or Greek forms (data, criteria, analyses, matrices, cacti). Uncountable nouns such as sheep and news stay unchanged.
Does the singularizer keep capitalization?
Yes. ALL-CAPS input stays ALL-CAPS (CHILDREN → CHILD). Title Case stays Title Case (Users → User). Lowercase stays lowercase.
What input is rejected?
Missing text, a non-string, empty or whitespace-only values, phrases with spaces, tokens longer than eighty characters, and strings that are not letters (optional hyphens).
What happens to nouns like sheep or news?
They come back unchanged. Words such as sheep, series, species, deer, fish, aircraft and news are the same in the singular, so cutting off a final s would invent words like shee or new.
How are compounds such as mothers-in-law handled?
The first element is made singular, the way English treats these compounds: mothers-in-law becomes mother-in-law and passers-by becomes passer-by. Only single words, with or without internal hyphens, are accepted.
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/dev/singularize-word \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"cities"}'const res = await fetch("https://api.kit.forhosting.com/dev/singularize-word", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "cities"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/singularize-word",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "cities"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/singularize-word", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"cities"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"cities"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/singularize-word", 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": "cities"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.singularize_word",
"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_chars | 80 |
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
An English word singularizer turns a plural noun into the matching singular form so naming tools, code generators, and schema mappers can invert a list, a table, or a collection label without a language model. Empty strings, phrases with spaces, and tokens that are not letters fail with invalid_input and are not billed.
How English plurals become singulars
Learned Latin and Greek forms show up in APIs and science schemas—data to datum, criteria to criterion, analyses to analysis, matrices to matrix, cacti to cactus—and they cannot be guessed from the last two letters.
Input contract, response shape, and errors
The value must be a single English word of letters only, optionally hyphenated, after trim, and at most eighty characters. Phrases with spaces are rejected because this landing is a word singularizer, not a sentence lemmatizer: send cities, not the cities. ALL-CAPS input produces an ALL-CAPS singular; Title Case input produces a Title Case singular, which is what model and table name generators expect. Failed validation is never charged. POST a JSON body with the required string field text. Aliases word, input, value, and noun are accepted so existing naming pipelines do not have to rename the key. Digits, underscores, punctuation other than an internal hyphen, and empty or whitespace-only strings fail with invalid_input that names the field text. On success the body echoes text and word as the trimmed input, singular as the case-restored result, changed as a boolean that is false when the token was already singular or uncountable, rule as a stable label such as ies_to_y, irregular, drop_es, uncountable, or compound:irregular, and message as a short English summary you can log. Examples: cities yields city with rule ies_to_y; children yields child with rule irregular; boxes yields box with rule drop_es; Users yields User with rule drop_s; sheep yields sheep with changed false. Successful calls use the published $0.002 base price with unit item.
Where a noun singularizer earns its keep
This endpoint is the inverse of a pluralizer for those naming jobs: feed the plural you already have and store the singular. Data dictionaries that store entity labels in the plural can call the solver once per label when emitting TypeScript interfaces, OpenAPI schemas, or database entity names.
Integration use cases
API and schema field mapping
Map plural resource paths and GraphQL list fields to a singular type name without a naive strip of the final s.
Technical questions
How do I convert a plural English noun to singular?
Send one word in the text field (aliases word, input, value, noun). The API returns singular with the applied rule. Example: cities → city, children → child.
What does the English word singularizer cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.