Discord Snowflake ID Format
Learn how Discord Snowflake IDs encode creation time, worker data, process data, and sequence numbers inside a 64-bit integer.
Overview
Every Discord user, server, channel, role, and message is identified by a numeric ID. That ID is not random. Discord uses a Snowflake format, a 64-bit integer structure that encodes time and a small amount of internal metadata.
This is why a Discord ID lookup tool can calculate an exact creation date without needing private account access.
Snowflakes are useful because they are stable. A user can change their display name, username, avatar, banner, and server nickname, but the underlying numeric ID does not change. For moderation logs, audit notes, account-age checks, and developer tools, the Snowflake is the reliable reference.
They are also why Discord IDs look so large. The number is not meant to be read by a human as a normal counter. It is a compact binary layout that combines a timestamp with internal fields that help Discord generate many unique IDs across distributed systems.
Discord Snowflake Bit Layout
A Discord Snowflake contains four segments:
| Segment | Bits | Purpose |
|---|---|---|
| Timestamp | 42 | Milliseconds since the Discord epoch |
| Worker ID | 5 | Internal machine identifier |
| Process ID | 5 | Internal process identifier |
| Increment | 12 | Sequence number for IDs created in the same millisecond |
The important part for lookup tools is the first 42 bits. They store the timestamp.
Here is the same structure as a code-like breakdown:
timestamp bits | worker bits | process bits | increment bits
42 bits | 5 bits | 5 bits | 12 bitsFor most public lookup use cases, the worker, process, and increment fields are diagnostic details rather than user-facing identity data. The timestamp is the field that answers questions such as "when was this account created?" or "when was this message object created?"
Discord Epoch
Discord counts time from its own epoch rather than from the Unix epoch.
- Discord epoch:
2015-01-01 00:00:00 UTC - Discord epoch in Unix milliseconds:
1420070400000
To calculate the real creation time:
- right-shift the Snowflake by 22 bits
- add the Discord epoch
- interpret the result as Unix milliseconds
In JavaScript-style pseudocode:
const DISCORD_EPOCH = 1420070400000;
const timestampMs = Number(BigInt(discordId) >> 22n) + DISCORD_EPOCH;
const createdAt = new Date(timestampMs);The result is a UTC moment. A browser or Discord client may display that same moment in a local timezone, so two people can see different clock times while still referring to the same Snowflake timestamp.
Why This Matters for Account Age
Because the timestamp is built into the ID itself, the creation date is:
- exact to the millisecond
- stable over time
- independent of usernames, avatars, or display names
That makes the Snowflake the most reliable way to estimate when a Discord account or object was created.
What a Snowflake Can and Cannot Tell You
A Snowflake can tell you:
- when an account or object was created
- whether two objects were created close together in time
- whether an ID belongs to the general Discord Snowflake format
A Snowflake cannot tell you:
- the email address of the user
- their private messages
- their IP address
- whether they currently own Nitro
Those details are not encoded in the ID.
Examples of Objects That Use Snowflakes
The same Snowflake structure is used for:
- user IDs
- guild or server IDs
- channel IDs
- role IDs
- message IDs
- webhook IDs
- bot account IDs
This is why an account age checker can also work as a server creation date checker or message timestamp decoder.
The key is interpretation. A user ID timestamp means the account object was created. A server ID timestamp means the server was created. A channel ID timestamp means the channel object was created. A message ID timestamp means the message object was created. The Snowflake format is shared, but the real-world meaning depends on which Discord object the ID belongs to.
For example, if a lookup decodes a message ID to March 4, 2024 at 12:30 UTC, that timestamp describes the message creation time, not the account age of the author. If you want a user's account age, you need the user's own ID.
Practical Use Cases
People commonly decode Snowflakes to:
- estimate account age during moderation
- identify newly created spam or raid accounts
- verify when a server or channel was created
- investigate the order of events in community incidents
Snowflake decoding is also useful when profile metadata is missing. If Discord does not return a public avatar, banner, username, or badge list, a valid Snowflake can still decode into a creation timestamp. That is why creation-date tools can continue to work even when profile asset tools show a missing result.
Limitations
A Discord Snowflake is not a private profile database. It does not contain someone's email address, phone number, IP address, private messages, password, current Nitro subscription, or server-specific permissions. It also does not prove who controls an account today. It only encodes when a Discord object was created and includes internal uniqueness fields.
If a tool claims that a Snowflake alone can reveal private identity details, treat that claim as unsafe. A responsible Discord Snowflake decoder should explain the timestamp fields clearly, show the limits of the data, and separate decoded ID data from public profile data returned elsewhere.