Flickr Base58 encoder & decoder
“Hello World” becomes iXf12sRWto45bmC in Flickr Base58, the alphabet behind flic.kr short links: no 0, O, I or l, and lowercase before uppercase, the reverse of Bitcoin's order. Encode text or a photo-style number and decode either back. 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
- iXf12sRWto45bmC
- Output format
- Text
- Input
- Hello World
- Base58
- iXf12sRWto45bmC
The alphabet keeps digits and letters but drops zero, capital O, capital I, and lowercase L—the four glyphs people confuse most when reading handwritten notes, printed labels, or shared URLs—and orders lowercase letters before uppercase, which is the opposite of the Bitcoin Base58 order.
What Flickr Base58 is and how it differs from Bitcoin Base58
Base58 is a binary-to-text family of encodings that map an arbitrary value onto a fifty-eight-symbol alphabet. Flickr’s short-URL scheme uses one concrete ordering: digits one through nine, then lowercase a–z without L, then uppercase A–Z without I and O. That ordering is not the Bitcoin alphabet.
Bitcoin uses the same excluded glyphs but places uppercase before lowercase, so the same byte sequence encodes to a different string under each alphabet. Encoding text walks UTF-8 bytes as a big-endian integer in base two hundred fifty-six, repeatedly divides by fifty-eight, and maps each remainder to the Flickr alphabet; leading zero bytes become leading ones in the output, matching the usual Base58 byte convention.
Encoding an integer—for example a photo ID used in a short link—treats the value as a non-negative whole number, repeatedly divides by fifty-eight, and builds the string without a separate leading-zero byte pad; zero itself becomes the first alphabet character, one. Decoding reverses the map: each character becomes a digit zero through fifty-seven, the big integer is rebuilt, and either UTF-8 bytes or the integer digit string is returned. When a character outside the alphabet appears—digit zero, capital O, capital I, lowercase L, punctuation, or whitespace—the decoder must fail loudly.
What you can do with it
Human-safe tokens with Flickr alphabet order
Encode short labels under the Flickr alphabet so printed codes avoid 0/O/I/l confusion and match lowercase-first short-URL conventions.
Teaching alphabet order versus Bitcoin Base58
Classrooms encode Hello World under Flickr and Bitcoin alphabets, compare strings, then force invalid characters to show strict validation.
FAQ
What alphabet does this Flickr Base58 encoder use?
The Flickr short-URL alphabet: 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ. It excludes 0, O, I, and l, and places lowercase before uppercase.
How is Flickr Base58 different from Bitcoin Base58?
Both drop 0, O, I, and l, but Flickr orders lowercase letters before uppercase while Bitcoin does the reverse. The same bytes or integer therefore encode to different strings.
Can I encode integers for short-URL style codes?
Yes. Set format to integer and pass a non-negative digit string in text (mode encode). Decode with the same format to recover the decimal integer.
Is the Flickr Base58 encoder free?
The browser tool is free and runs locally.
How do I turn a Flickr short code back into a number?
Choose decode together with the number option: the code is read with the Flickr alphabet and you get the number back as plain decimal digits. With the text option you get UTF-8 text instead, so pick the one that matches how the code was made.
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/base58-flickr \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello World"}'const res = await fetch("https://api.kit.forhosting.com/enc/base58-flickr", {
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/base58-flickr",
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/base58-flickr", 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/base58-flickr", 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.base58_flickr",
"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 | 100000 |
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
A Flickr Base58 encoder maps ordinary UTF-8 text or non-negative integers onto the fifty-eight-character alphabet that Flickr popularized for flic.kr short links, and a Flickr Base58 decoder reverses that mapping so you recover the original payload. Choose encode to convert plain text or a photo-style integer ID into Flickr Base58, or decode to recover UTF-8 or the integer; invalid alphabet characters return a clear invalid_input error instead of silent corruption.
How to call the API and what the response contains
Send a JSON body with a required string field text (aliases input, value, and data), an optional mode that is either encode or decode, and an optional format that is either text or integer. The default mode is encode and the default format is text: UTF-8 bytes of text become a Flickr Base58 string. Mode decode with format text treats text as a Base58 payload and returns the recovered UTF-8 string. Format integer expects a non-negative digit string on encode (no sign, spaces, or decimal point) and returns a Flickr Base58 short-URL style token; on decode it returns the integer as a decimal string and, when safe, as a JSON number. Input length is capped at one hundred thousand characters so a single request cannot exhaust Worker memory on pathological big-integer expansion. On success for text encode, the response includes mode, format, input, result and base58 with the same encoded string, alphabet with the full fifty-eight-character Flickr constant, alphabet_name set to flickr, input_bytes, output_length, and a short English message. Integer encode responses add number_string and number when the value fits a safe JSON integer. Decode responses mirror the same alphabet fields with input_length and either text plus output_bytes or number_string plus number. Failed validation—missing text, non-string text, oversize input, an unknown mode or format, an invalid Base58 character, a non-digit integer payload, or decoded bytes that are not valid UTF-8—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price.
Practical tips, limits, and when to prefer Flickr over Bitcoin Base58
Prefer format integer when you are working with short-URL style numeric identifiers such as photo IDs and you need the Flickr alphabet ordering that lowercase-first short codes use. Prefer format text when you start from human-readable UTF-8 and want a Base58 string that still omits 0, O, I, and l but follows Flickr’s character order rather than Bitcoin’s. Encode a known integer such as one two three four five six seven eight nine zero one two, decode the token, and assert the decimal string matches. When teaching, encode the same sentence under both alphabets side by side so learners see why the strings differ even though both drop the same four ambiguous glyphs. Deliberately include a forbidden character—digit zero, capital O, capital I, or lowercase L—in a decode request to assert that your client handles invalid_input and the error message that names the index and the excluded glyphs. Keep payloads under the published character limit; extremely long strings expand as big integers and are better split or handled offline. This tool is not a full short-link resolver: it does not fetch flic.kr redirects, does not classify Flickr farm hosts, and does not validate Bitcoin addresses or Base58Check checksums. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when you fuzz invalid alphabet characters.
Integration use cases
Short-URL style ID fixtures in tests
Encode photo-style integer IDs to Flickr Base58 and assert decode recovers the same decimal string in CI without a third-party package.
Technical questions
What happens if I decode a string containing 0, O, I, or l?
The API returns invalid_input, names the bad character and its index, and reminds you that Flickr Base58 excludes those four glyphs. Failed tasks are not charged.