How to Decode a JWT
To decode a JWT, paste it into a JWT decoder. The token is three Base64url segments separated by dots: header, payload and signature. The decoder reads the first two and shows the claims, including exp and iat as readable dates. Decoding is not verification — anyone can read a JWT, so never trust its claims without checking the signature on your backend.
JWT Decoder
Read a JSON Web Token header, payload and expiry.
A JWT is not encrypted. It is signed. The header and payload are Base64url-encoded, which is an encoding, not a cipher, and anyone holding the token can read every claim inside it. That is by design, and it is the single most misunderstood thing about the format.
The signature is what makes a JWT trustworthy, and checking it requires the signing key. That is why a decoder in a web page can show you what a token says but can never tell you whether to believe it.
Step by step
-
Paste the token
Paste the whole thing, including both dots. If you copied it from an Authorization header, drop the leading "Bearer " prefix — that is part of the header, not the token.
-
Read the header
The header names the signing algorithm in alg and the token type in typ. A kid value, when present, identifies which key from a key set was used, which matters when a service rotates keys.
-
Read the payload claims
The payload holds the claims. The registered ones are iss (issuer), sub (subject), aud (audience), exp (expiry), nbf (not before), iat (issued at) and jti (token id). Everything else is application-specific.
-
Check the expiry
exp and iat are Unix timestamps in seconds, not milliseconds. The decoder renders them as dates and flags a token that has already expired, which is the most common cause of a 401 that "worked yesterday".
-
Verify on the backend, not here
Verification requires the secret or public key, and pasting a signing key into any web page is a bad habit. Check the signature in your own service, using a library that validates alg rather than trusting the header.
Example
The payload segment of a token, decoded. exp is a Unix timestamp in seconds.
Token payload segment
eyJzdWIiOiIxMjM0IiwibmFtZSI6IkFkYSIsImlhdCI6MTc1NDUyMTIwMH0
Decoded claims
{
"sub": "1234",
"name": "Ada",
"iat": 1754521200
}
iat → 7 Aug 2025, 00:00:00 UTC
Frequently asked questions
Does decoding verify the token?
Is it safe to paste a real token here?
Why does my token show as expired?
What does alg: none mean?
Can I decode an encrypted JWE?
Tools used in this guide
All tools →- JWT Decoder Read a JSON Web Token header, payload and expiry. In your browser
- Base64 Encoder and Decoder Encode text to Base64 or decode it back, including URL-safe. In your browser
- Unix Timestamp Converter Convert between Unix timestamps and human dates. In your browser
- HMAC Generator Sign a message with a secret key using HMAC. In your browser
- JSON Formatter Beautify, validate and sort JSON with precise error messages. In your browser
Related guides
All guides →Last reviewed .