If you have ever used a Discord account age checker, you have already relied on the Snowflake format.
A Discord Snowflake is the numeric ID format Discord uses for users, servers, channels, roles, messages, and other objects. It is not just an arbitrary number. Part of the ID records when the object was created, while the remaining bits help Discord generate unique values across its systems.
That timestamp makes Snowflakes useful even when no public profile is available. A valid ID can often tell you when an object was created, but it cannot reveal private account information or prove who controls an account.
Why Discord Uses Snowflakes
Snowflakes let Discord generate unique IDs across a large distributed system without depending on one central counter. IDs created later generally have a larger timestamp portion, so they also preserve useful chronological ordering.
That makes them useful for:
- sorting newly created objects
- identifying the age of an account
- tracing when a message or server was created
Discord returns Snowflakes as strings in its HTTP API. That detail matters in JavaScript because many Discord IDs are larger than Number.MAX_SAFE_INTEGER. Treating an ID as an ordinary JavaScript number can round it and produce a wrong creation time. Use the original string and convert it to BigInt when you need to decode it.
What Is Encoded in a Snowflake
A Discord Snowflake is a 64-bit value with four logical parts:
- 42 bits for milliseconds since the Discord epoch
- 5 bits for an internal worker ID
- 5 bits for an internal process ID
- 12 bits for an incrementing sequence number
The timestamp section is what powers account age tools. Worker, process, and increment fields help make IDs unique, but they are implementation details. They do not identify a physical server, employee, device, IP address, or geographic location.
Why a Snowflake Can Reveal Creation Time
The first 42 bits represent milliseconds since the Discord epoch, which starts at 2015-01-01 00:00:00 UTC. Its millisecond value is 1420070400000.
By decoding that segment, a tool can calculate:
- the exact creation date
- the approximate age of the account
- whether multiple objects were created near the same time
The result is a fixed instant in UTC. A website may then display that instant in your browser's local time zone, so two people can see different clock times or even different calendar dates for the same Snowflake. That is a display difference, not a different creation timestamp.
Decode a Snowflake Step by Step
To recover the creation time, keep the ID as an integer, shift it right by 22 bits, and add the Discord epoch:
timestamp_ms = (snowflake >> 22) + 1420070400000In modern JavaScript, use BigInt so the ID is not rounded:
const DISCORD_EPOCH = 1420070400000n;
function createdAtFromSnowflake(id) {
const timestamp = (BigInt(id) >> 22n) + DISCORD_EPOCH;
return new Date(Number(timestamp));
}The conversion to Number happens only after extracting the millisecond timestamp, which is within JavaScript's safe integer range for normal dates. If BigInt(id) throws an error, the input is not a clean integer string and should not be treated as a Discord Snowflake.
You can also inspect the remaining fields with bit masks, but they rarely help a normal lookup:
const snowflake = BigInt(id);
const worker = (snowflake & 0x3e0000n) >> 17n;
const process = (snowflake & 0x1f000n) >> 12n;
const increment = snowflake & 0xfffn;Worked Example
Consider the Snowflake 175928847299117063.
- Shift the value right by 22 bits to isolate the timestamp offset.
- Add
1420070400000, the Discord epoch in milliseconds. - Convert the result to an ISO date.
The decoded instant is 2016-04-30T11:18:25.796Z. The trailing Z means UTC. A browser in another time zone may format that instant differently, but the underlying millisecond value remains the same.
The example's worker, process, and increment values are 1, 0, and 7. Those numbers help explain how the ID was made; they do not reveal the account's location, device, or identity.
What a Snowflake Is Useful For
People commonly use Discord Snowflake decoding to:
- identify newly created spam accounts
- verify the age of users in moderation workflows
- estimate when a server or channel was created
- inspect message timing in incident reviews
Moderators can use account age as one context signal when reviewing spam or raid activity. It should not be the only signal: a new account is not automatically malicious, and an old account is not automatically trustworthy. Combine the timestamp with observable server behavior and your community rules.
Snowflakes can also help distinguish object types in a workflow. A numeric value may be a valid Snowflake but still be the wrong type for a profile lookup—for example, a channel ID pasted into a user lookup field. The timestamp can decode correctly even when the profile request returns no user.
What a Snowflake Does Not Reveal
It is important not to overstate what a Snowflake can do.
A Discord ID does not reveal:
- passwords
- emails
- private messages
- billing details
- private server membership history
It mainly helps with time-based inference and ID consistency.
It also does not contain a username, display name, avatar, banner, badge list, or current server membership. Those fields come from separate Discord responses when they are available. This is why an account-age result can succeed while a profile lookup shows an unknown user or no image.
Why Snowflakes Matter for Discord Tools
Snowflakes are one of the main reasons Discord tools can be useful even without full profile access.
Even if profile metadata is missing, the ID may still be enough to recover:
- account creation time
- server creation time
- message creation time
That separation is useful when interpreting errors. A locally decoded timestamp only proves that the number has a usable Snowflake structure. It does not prove that the object still exists, that the caller has access to it, or that Discord currently returns public metadata for it.
Common Snowflake Mistakes
Converting the ID to a JavaScript number first
This can silently change the last digits. Keep the original string and use BigInt.
Treating every numeric ID as a user
Users, servers, channels, roles, and messages all use Snowflakes. A successful date decode does not identify the object type.
Reading the date as proof of identity
The timestamp belongs to a Discord object, not necessarily to the person currently presenting it. Use it as context, not identity verification.
Assuming a missing profile means an invalid Snowflake
Profile data can be unavailable even when the timestamp is valid. Check the input type, rate limits, and the distinction between local decoding and remote profile lookup.
Comparing formatted dates without checking time zones
Compare ISO timestamps or millisecond values. Localized date strings can differ around midnight and daylight-saving transitions.
The bit layout and formulas above follow Discord's official API reference.

