Upside down text flip
Hello World! comes out as ¡plɹoM ollǝH: each letter is swapped for a rotated Unicode look-alike and the order is reversed, so it reads right when the screen is turned around, and it pastes as plain text anywhere. 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!
- Calculation mode
- Encode
- Result
- ¡plɹoM ollǝH
- Direction
- encode
- Mapped
- 11
- Unmapped count
- 1
Upside-down text flip turns ordinary messages into rotated Unicode look-alikes that still travel as plain characters, so a joke, handle, caption, or puzzle answer can appear inverted even when a platform strips fonts, rich text, or CSS transforms. Generators walk each character, replace it with a 180-degree visual twin when one exists, reverse the order so the line reads correctly when the phone is flipped, and leave everything else in place. This capability implements that classic contract deterministically: encode maps and reverses, decode reverses and restores plain Latin letters, digits, and punctuation, and auto mode picks the direction by detecting exclusive upside-down glyphs. Spaces, emoji, CJK, and other unmapped characters pass through and appear once in an unmapped report so you always know what stayed intact.
How the flip works and what you get back
Upside-down text is not a CSS rotate or an image filter; it is a fixed table of code-point look-alikes plus an order reverse so the string remains readable after a physical 180-degree turn. Lowercase letters map to phonetic and modifier forms such as a to ɐ, e to ǝ, n to u, and t to ʇ, while many uppercase letters use mathematical and letterlike symbols such as A to ∀, E to Ǝ, and T to ⊥.
Digits have familiar twins—six and nine swap, one becomes Ɩ, and zero and eight often keep a symmetric form. Punctuation pairs swap sides: parentheses, brackets, and angle brackets exchange partners; question and exclamation marks become ¿ and ¡; a period becomes the raised dot ˙. Encode walks every Unicode scalar in your string, substitutes each plain character that has a table entry, leaves unmapped scalars alone, then reverses the entire scalar sequence so the rightmost character becomes leftmost.
Decode does the inverse path: reverse first, then map each known flipped glyph back to its plain twin.
Input fields, modes, validation rules, and common pitfalls
Send a required string field named text containing the joke, username, caption, or puzzle line you want to flip or restore. Optionally send mode as encode, decode, or auto; when omitted, auto is the default. Auto mode decodes when any exclusive upside-down glyph is present—characters that only appear as flipped forms and never as plain map keys—and otherwise encodes, which is the right default for pasting a mixed meme without thinking about direction.
Characters without a table entry, including most emoji, CJK ideographs, and rare symbols, stay in the result in original form and are listed uniquely under unmapped so you can audit coverage without rejecting the whole string. Do not treat the output as encryption: anyone who knows the scheme can reverse it, and the product page must never market upside-down text as a confidentiality control.
Prefer this landing when search intent is literally upside down text, flip text, or inverted Unicode generator; plain reverse-only tools and ROT13 answer different intents and should stay separate.
Everyday uses, classrooms and practical limits
Social writers and community managers flip short lines for posts, bios, and stickers when a platform accepts Unicode but not CSS rotation. Puzzle designers hide spoilers and riddle answers so readers can rotate the device or paste into decode mode to reveal them. Teachers demonstrate that a substitution table plus reverse is still a reversible transform, then contrast it with true cryptography later in the syllabus.
Support desks receive flipped paste from customers and need a reliable decode path back to searchable plain text for tickets. Pair with plain reverse or Unicode style converters only when a later step needs a different transform; keep upside-down flip on its own landing so SEO intent stays sharp and users land on the map-plus-reverse behavior they expect.
What you can do with it
Social posts and profile flair
Flip short jokes, bios, and captions into upside-down Unicode so they stand out in feeds that accept plain characters only.
Puzzles and spoiler hides
Hide riddle answers and spoilers as inverted text; readers decode with the same tool or by rotating the screen.
FAQ
How do I flip text upside down?
Use mode encode or leave mode as auto. The result field holds the mapped and reversed string.
How do I restore upside-down text to plain?
Send the flipped string in text with mode decode, or use auto when the string already contains exclusive upside-down glyphs. The result is the restored plain text.
What happens to characters without a flip form?
They stay in the result in their original form.
Is the upside-down text flip free?
The browser tool runs free on your device.
Why is the order of the letters reversed?
Because turning a phone or a page through 180 degrees also turns the line around. Flipping each letter and then reversing the sequence makes the text read correctly from left to right once it is physically upside down.
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/enc/upside-down \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello World!"}'const res = await fetch("https://api.kit.forhosting.com/enc/upside-down", {
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/enc/upside-down",
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/enc/upside-down", 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/enc/upside-down", 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": "enc.upside_down",
"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.
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
How upside-down flipping works and what the response contains
On success the response echoes the original text, returns result as the transformed string, mode as the requested operation, direction as the resolved encode or decode path, mapped as the count of table hits, unmapped_count and unmapped as the unique passthrough characters, length as the scalar length of the result, method set to upside_down, and order_reversed true because the reverse step is always part of the algorithm.
Input fields, modes, validation rules, and common pitfalls
Aliases such as input, value, data, message, and string are accepted for the same field so scripts can reuse existing payload shapes. Direction aliases such as op, operation, and direction, and short values like enc, dec, flip, unflip, to_flip, and from_flip are also accepted. Missing text, non-string objects for text, empty strings, unknown mode values, and strings longer than the documented maximum fail with invalid_input and a clear English message. Validation failures do not consume prepaid balance.
Practical workflows, pricing, classroom use, and API limits
Call the in-browser tool for one-off flips without installing libraries; call the API when a backend, serverless function, or SDK needs a stable contract under balance at $0.002 per successful item. Keep payloads to ordinary text sizes appropriate for a Worker isolate item call—this tool is for messages and captions, not multi-megabyte binary blobs.
Integration use cases
Classroom and CI fixtures
Teachers demo reversible substitution-plus-reverse; engineers pin deterministic encode and decode outputs in automated tests.
Technical questions
What if text is empty?
The request fails with invalid_input. A non-empty string is required; empty input is not charged on the prepaid API.