Maya vigesimal numeral converter free
Convert whole numbers into Maya base-twenty numerals and back, written as the plain words shell, bar and dot: 0 is a single shell, and every place from 1 to 19 is bars of five plus dots. Works up to 63,999,999. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Direction
- Decimal to Maya
- Decimal number
- 0
- Maya glyphs (highest place first)
- shell
- Digit value per place (0–19)
- 0
Converts integers to Maya vigesimal place glyphs (dots, bars, shell) in ASCII and back. Free, deterministic, and private in your browser. No account required.
How the Maya wrote numbers in base twenty
Maya numerals count in twenties instead of tens. Each place is worth twenty times the place below it, so the units come first, then the twenties, and so on up through six places. Inside one place, the digit runs from zero to nineteen and is drawn with bars and dots: every bar stands for five and the dots, up to four, add the rest, so nineteen is three bars and four dots. Zero has its own sign, a shell, which keeps an empty place visible. Here each sign is written as a plain English word, shell, bar or dot, so you can copy the result into notes, a worksheet or a drawing tool.
Converting in both directions without slips
To go from a decimal number to Maya numerals, type a whole number from 0 to 63,999,999 and you get the places from the highest power of twenty down to the units, each with its value from 0 to 19. To go back, list the places in that same order using the words shell, bar and dot, and the tool multiplies by twenty at each step before adding the next place. The usual mistakes are reading the places in the wrong order, forgetting the shell for an empty place and drawing five dots where a bar belongs. Places with an unknown sign, a value above nineteen or a number outside the range are refused with a clear message.
Inputs and outputs
Provide mode plus either n or places. Required fields must be present and correctly typed. Optional fields use documented defaults.
Error messages use stable English match substrings for the harness.
Edge cases and limits
Zero maps to a single shell place. Twenty maps to one bar power and a shell unit. Negative n is rejected.
Extremely large intermediate values beyond the six place window become an out of range error rather than null fields.
What you can do with it
Homework and exams
Check classic quantitative problems quickly with stable, reproducible answers.
Automation
Call the same pure function from scripts without installing a spreadsheet or CAS.
FAQ
Is this free?
Yes. Tier A runs entirely in your browser without an account.
How do I read Maya numerals back into a decimal number?
Choose the reverse direction and list the places from the highest one down to the units, writing each with the words shell, bar and dot. The tool multiplies by twenty at every step, adds the next place and shows the decimal total.
What is the largest number it can convert?
63,999,999, the biggest value that fits in six places of base twenty. Larger numbers, negative numbers and anything that is not a whole number are refused instead of being cut or rounded.
How many bars and dots make up each digit?
Each bar is worth five and each dot one, with at most four dots. A digit from 1 to 19 uses as many bars as fit plus the remaining dots, so 19 is three bars and four dots.
How is zero written in Maya numerals?
With a shell. The number zero on its own becomes a single shell, and inside a larger number a shell marks any place that holds nothing, so the other places keep their value.
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/math/maya-numerals \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"to_maya","n":1}'const res = await fetch("https://api.kit.forhosting.com/math/maya-numerals", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "to_maya",
"n": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/maya-numerals",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "to_maya",
"n": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/maya-numerals", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"to_maya","n":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"to_maya","n":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/maya-numerals", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"mode": "to_maya",
"n": 1
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.maya_numerals",
"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 it works
Each place value uses base twenty. Digits from one to nineteen are written with bars of five plus remaining dots; zero is a shell token. Glyph encoding is pure ASCII: shell for zero, the word bar repeated for each group of five, and the word dot repeated for the remainder one through four. Mode to_maya walks an integer from zero through sixty three million nine hundred ninety nine thousand nine hundred ninety nine and emits place glyphs from the highest power of twenty down to the units place. Mode from_maya reads a non empty array of glyph tokens, multiplies by twenty for each step, and returns the decimal total. The implementation is fully deterministic and runs free in the browser with the same pure function as the API path. Inputs are validated before any arithmetic so wrong types and out of range values become clear invalid_input errors instead of silent NaN results.
Inputs and outputs
When mode is to_maya you send an integer n and receive places as ASCII tokens plus place_values as the matching integers zero through nineteen. When mode is from_maya you send places as a non empty string array of shell, bar and dot tokens and receive the reconstructed integer n. The success payload always includes the primary result fields named in the output schema so clients can bind UI metrics without guessing. Empty place arrays, digits outside zero through nineteen, unknown glyph text, and n outside the allowed range are rejected early with invalid_input.
Edge cases and limits
Because every path is pure and seed free, repeated calls with the same body always return the same JSON shape and values. This makes homework checks, classroom demos, and scripted automation safe to run offline without a spreadsheet or computer algebra system.
Integration use cases
Teaching demos
Show worked examples with golden fixtures that match the free widget and the API.
Technical questions
Does it call the network?
No. The parse engine keeps everything on-device.
What if my input is invalid?
You receive invalid_input with a clear English message.
Are results stable?
Yes. Deterministic math and golden examples freeze the contract.
Who authors this capacity?
Pavilion on the ForHosting KIT workshop.