Uppercase to lowercase converter
HELLO World becomes hello world. Paste text stuck in ALL CAPS or mixed case and get every letter in lower case, accents included, while digits, punctuation, emoji and spaces stay exactly where they were. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- HELLO World
- Result
- hello world
- Converted
- hello world
- Lowercase
- hello world
- Length
- 11
An uppercase-to-lowercase converter takes a text string that arrived in capital letters, mixed case, or a blend of both, and returns every letter folded to its lower-case form. People type this exact query when a document, form, spreadsheet export, or log dump is stuck in ALL CAPS and they need a calm lower-case paste for email, source code, search indexes, or a style guide that forbids shouting. Paste the string; the engine maps A through Z and their Unicode cousins, leaves digits and punctuation untouched, and returns the lowercased result with length and change metadata so you can see whether anything actually differed. No network, no random seed, and no clock: identical text always yields identical output.
How uppercase folds to lowercase, character by character
Uppercase-to-lowercase conversion is the search people type when they have shouting ALL CAPS copy, a mixed-case paste from a spreadsheet, or a heading that arrived entirely in capital letters and they need every letter dropped to its lower-case counterpart. The mapping is not a style choice and it is not a locale-sensitive formatter with a language dropdown: it is Unicode default case conversion as implemented by the JavaScript host.
For basic Latin the rule is the familiar constant offset: code units U+0041 through U+005A (A through Z) become U+0061 through U+007A (a through z) by adding thirty-two. For the rest of the encoded text the engine applies Simple_Lowercase_Mapping, so É becomes é, Ñ becomes ñ, Ü becomes ü, and Greek or Cyrillic capitals follow the same table without stripping diacritics. Digits, punctuation, emoji, and whitespace never change, because they have no case pair.
There is no trim of surrounding spaces, no accent strip, no title-case of the first letter of each word, and no slugify of spaces into hyphens—those jobs are different search intents with their own landings. Empty strings are valid strings and convert to empty strings. Non-strings fail before any mapping runs.
Because the path is a pure parse walk over characters, latency stays sub-millisecond for typical form sizes and the published cost model is analytic rather than token-based.
Where an uppercase-to-lowercase converter earns its keep
Support inboxes and comment tools receive ALL CAPS messages that look like shouting; folding them to lowercase before filing, searching, or quoting keeps keyword rules and human readers aligned without rewriting punctuation. Product and growth teams normalize coupon codes, username candidates, and email local-parts that arrived in mixed case so User@Example.com and user@example.com cannot create duplicate accounts. Data engineers cleaning exports from CRMs, mainframes, and spreadsheets often force free-text columns that landed in capitals down to lowercase before joining on soft keys.
Content moderators paste messy ticket titles into a lower-case box before they hit keyword rules that assume a single case. Related searches such as convert uppercase to lowercase, all caps to lowercase, and mixed case to lower case land on this same one-field form; a general case converter with camel, snake, and title modes is a different query and a different page. If you later need uppercase conversion, title case, sentence case, slugify, or accent stripping, treat those as separate search intents rather than overloading this uppercase-to-lowercase page.
Stay inside the character cap, send a real string, and you get a reproducible lowercased result for homework, CMS plugins, and edge workers without standing up a full NLP stack.
What you can do with it
Calm ALL CAPS comments and tickets
Fold shouting support mail and comment threads to lowercase before search, quotes, and keyword rules, without changing digits or punctuation.
Normalize codes, usernames, and emails
Lowercase mixed-case coupon codes, username candidates, and email local-parts so uniqueness checks do not treat the same value as two records.
Clean capitalised spreadsheet columns
Convert free-text CRM and CSV columns that arrived in capitals into lowercase join keys with the same result shape as the browser tool.
FAQ
What does an uppercase to lowercase converter do?
It maps every letter in your uppercase or mixed-case string to its Unicode lower-case form and returns the lowercased string plus length and change metadata. Digits and punctuation are left unchanged.
Does it handle accented and non-Latin capitals?
Yes. ASCII A–Z folds with a constant offset; other scripts use Unicode-aware toLowerCase, so characters such as É, Ñ, and many Greek or Cyrillic capitals fold correctly without stripping diacritics.
Does it also remove extra spaces or accents?
No. Surrounding spaces are not trimmed, accents are kept so É becomes é, and nothing is turned into title case or joined with hyphens. Those are separate jobs with their own tools.
How can I tell whether anything actually changed?
The result reports how many characters changed and the length before and after. For HELLO World, six letters change and both lengths stay at 11, so you can see the fold at a glance.
Can it stop duplicate sign-ups caused by capital letters?
It helps. Folding User@Example.com to user@example.com before saving means the two spellings cannot create separate accounts, and the same works for coupon codes and username candidates typed in mixed case.
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/conv/uppercase-to-lowercase-converter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"HELLO World"}'const res = await fetch("https://api.kit.forhosting.com/conv/uppercase-to-lowercase-converter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "HELLO World"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/conv/uppercase-to-lowercase-converter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "HELLO World"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/conv/uppercase-to-lowercase-converter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"HELLO World"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"HELLO World"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/conv/uppercase-to-lowercase-converter", 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": "HELLO World"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "conv.uppercase_to_lowercase_converter",
"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 | 65536 |
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
Input that is not a string—numbers, booleans, arrays, or objects—fails with invalid_input instead of a silent coerce that would hide a wiring bug.
How uppercase folds to lowercase, character by character
A few Unicode special-casing sequences can theoretically change string length; this converter reports both original_length and length so a caller can detect that rare situation instead of assuming a one-to-one walk. Extremely long payloads above the published character cap fail with invalid_input so a single request cannot monopolize isolate memory.
What you send, what you get back, and what fails
Missing text fails before the fold. Send a JSON body with one required field named text containing the uppercase or mixed-case string you want lowercased. Aliases input, value, string, content, body, s, and message are accepted so older clients and form posts can use a natural name. The value must be a JSON string: numbers, booleans, arrays, objects, and null are rejected with invalid_input naming the field, because silently turning 42 into the characters four-two would hide a type error in a pipeline. On success the response echoes the original text, sets result, converted, and lowercase to the same fully lowercased string, reports length and original_length, sets changed true when any code unit differed, reports changed_count, labels from_case as uppercase_or_mixed and to_case as lowercase, and sets operation to uppercase_to_lowercase. When the input was already entirely lower case, result equals text, changed is false, and changed_count is zero—useful as a no-op detector in ETL guards. Classic checks include HELLO World becoming hello world, mixed identifiers like User_ID-42 becoming user_id-42, and strings with accents such as CAFÉ becoming café. Strings longer than the published character cap fail so one paste cannot exhaust Worker memory. Wire the free browser form for quick paste-and-copy work, then call the identical contract from scripts when you normalize bulk CSV columns or API payloads. Pricing for successful API calls is the published base of $0.002 per item; validation failures including a non-string text field do not consume prepaid balance.
Where an uppercase-to-lowercase converter earns its keep
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Technical questions
What happens if I send a number instead of a string?
The request fails with invalid_input. This converter does not coerce numbers, booleans, arrays, or objects into text; send a JSON string in the text field.
Will already-lowercase text change?
No. If every character is already lower case, result equals the original text, changed is false, and changed_count is zero.
What does the uppercase to lowercase converter cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.