Username Generator
Turn a name, nickname, project title, or short phrase into a practical set of username ideas.
Run — free
This deterministic username generator mixes familiar conventions such as numeric suffixes, underscores, compact letter affixes, and restrained leetspeak. You choose how many suggestions to receive and may supply a seed to obtain a repeatable set. It is useful when you want options quickly without surrendering control to an unpredictable random generator. The tool creates candidates only; it does not contact social networks, check availability, reserve accounts, or promise compliance with a particular service's naming policy.
Start with a recognizable base name
Enter the word or phrase that should remain recognizable across the results. A personal nickname, creator name, game character, community label, product concept, or project title can all work well. The generator trims surrounding space, changes letters to lowercase, and removes punctuation or spacing before it builds variants. For example, a base such as “River Stone” becomes a compact core that can receive a number, underscore, letter affix, or leetspeak substitution. Choose a count between one and one hundred according to how broadly you want to explore. A smaller count is convenient for a quick shortlist, while a larger count gives you more candidates to test on several services. An empty base name is rejected because there is no meaningful identity to preserve. A base containing no English letter or digit is rejected for the same reason. The output retains the cleaned idea rather than inventing unrelated dictionary words, making it easier to compare suggestions and recognize which pattern suits the identity you have in mind.
Use a seed to make exploration repeatable
The seed controls the exact sequence of patterns and pattern details. If the base name, count, and seed stay the same, the ordered suggestions stay the same as well. This is helpful when several people review naming options, when a design document must preserve a shortlist, or when an automated workflow needs stable output for tests. A seed may be a campaign label, project version, team name, or any other memorable text. Change it when you want a different repeatable set without changing the identity at the center of each candidate. The algorithm does not read the clock, call a network service, or use runtime randomness. Instead, it hashes the supplied values and advances a fixed integer sequence. That design also means the seed is not a password and should not be treated as secret material. It is simply a reproducibility control. If you omit it, the documented default is used, so even the default behavior remains stable between equivalent requests.
Check candidates where you plan to use them
Treat the returned list as a creative starting point, not as an availability report. Username rules differ between social networks, games, developer communities, forums, and internal systems. A service may prohibit underscores, impose its own length limit, reserve certain words, reject a leading digit, or already have an account using the same name. Copy promising candidates into the destination service and verify them there before printing, publishing, or building a brand around one. It is also wise to read the result aloud, check whether a leetspeak substitution creates an unintended word, and consider how easily another person can type it after hearing it. Teams can generate a stable set, remove choices that conflict with policy, and record the remaining shortlist with its seed for later review. Because this tool performs no lookup and sends no request to third parties, it cannot expose whether a candidate is registered. That separation keeps generation fast and deterministic while leaving the final naming decision with you.
What you can do with it
Build a creator-name shortlist
Create repeatable variants of a preferred creator name, then check the strongest candidates across the platforms you actually use.
Name test accounts consistently
Use a project-specific seed to produce stable, recognizable usernames for demonstrations, fixtures, or quality-assurance environments.
Explore alternatives for a taken name
Generate familiar numeric, underscore, affix, and leetspeak variations before testing availability on the destination service.
FAQ
What does it cost?
It runs free in your browser. API requests cost $0.002 each.
Are the suggestions guaranteed to be available?
No. The generator does not contact third-party services. Check each candidate directly on the platform where you intend to use it.
What makes the output deterministic?
A fixed hash and integer sequence derive every choice from the base name and seed. Equivalent inputs therefore return the same ordered list.
What happens if I omit the seed?
The generator uses its documented default seed, so the result is still repeatable.
Why was my base name rejected?
The base name must not be empty and must contain at least one English letter or digit after surrounding space is removed.
How many suggestions can I request?
You can request from one through one hundred unique suggestions in a single call.
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/web/username-suggest \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base_name":"River Stone","count":8}'const res = await fetch("https://api.kit.forhosting.com/web/username-suggest", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base_name": "River Stone",
"count": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/username-suggest",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base_name": "River Stone",
"count": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/username-suggest", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base_name":"River Stone","count":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base_name":"River Stone","count":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/username-suggest", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"base_name": "River Stone",
"count": 8
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.username_suggest",
"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
timeout_sec | 30 |
max_crawl_pages | 25 |
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. |