JWT Decoder — Inspect Token Claims Locally
Decode a JSON Web Token to read its header, payload and claims — including expiry, issuer and audience — entirely in your browser. The token is never uploaded, logged or transmitted, so you can safely inspect a live bearer token while you debug an auth flow.
Payload
Claims
Header
Signature
Shown as-is. Verifying a signature requires the issuer’s secret or public key, so it is a server-side check — this tool decodes, it does not verify.
What JWT Decoder does
Your token is never transmitted
Decoding runs in JavaScript on this page. There is no upload, no request and no server log — which matters, because a live bearer token pasted into a hosted decoder is a credential handed to a stranger.
Expiry answered immediately
The exp, iat and nbf claims are Unix timestamps, which tell you nothing at a glance. They are converted to your local time with a plain-language summary such as Expired 4 minutes ago.
Registered claims explained
Standard RFC 7519 claims — iss, sub, aud, jti and the rest — are annotated with what they mean, so you are not switching to the spec to remember which is the audience.
Masking for screen sharing
Identity claims such as sub and email are masked by default, so you can screenshot or share a decoded token without leaking who it belongs to. Copy still yields the real payload.
Supported formats
The tool reads raw text, so whatever your stack produces will work.
How it works
Paste the token
Drop in the JWT from your request header, cookie or auth response. A
Bearerprefix is fine — it is stripped for you.Read the decoded output
The header and payload are decoded and pretty-printed as you type, with the expiry status shown above them.
Check the claims that matter
Scan the claims table for expiry, issuer and audience, and copy any single value you need to paste elsewhere.
Cheatsheet
The tokens you reach for most, at a glance.
issIssuer — who created and signed the tokensubSubject — who the token is about, usually a user IDaudAudience — the recipient the token is intended forexpExpiration time — reject on or after this momentnbfNot before — reject before this momentiatIssued at — when the token was createdjtiJWT ID — unique identifier, used to prevent replayalgAlgorithm used to sign, e.g. HS256 or RS256kidKey ID — which key from the issuer's key set signed itscopePermissions granted, space-separatedHow people use it
Debugging a 401
The fastest way to tell an expired token from a wrong audience or a missing scope is to look at the claims the API is rejecting.
Comparing two environments
Decode the token your staging and production issuers hand out and compare the claim sets when one works and the other does not.
Reviewing what a token exposes
A JWT payload is only base64url — not encrypted. Decoding your own tokens shows exactly what any holder can read.
Frequently asked questions
Is it safe to paste a real token?
Decoding happens entirely in your browser with no network request, so the token is never transmitted. Even so, treat any live token as a credential: prefer an expired or test token where you can, and rotate anything you have pasted into a tool you do not control.
Does this verify the signature?
No. Decoding shows you what a token contains; verifying a signature requires the issuer's shared secret or public key and is a server-side concern. A decoded payload tells you what the token claims, not that the claim is trustworthy.
Why can I read the payload without a key?
A JWT payload is base64url-encoded, not encrypted. Anyone holding the token can read every claim in it. The signature protects against modification, not against reading — so never put a secret in a JWT payload.
What does "alg: none" mean?
It marks an unsecured token with no signature at all. Some libraries have historically accepted these by default, which lets an attacker forge any payload. If you see it on a token your API accepts, treat it as a vulnerability.
The exp claim looks like a random number.
It is a Unix timestamp — seconds since 1 January 1970 UTC. It is converted to your local time here, and you can convert arbitrary values with the Timestamp Converter.
Can I decode a token that is not a JWT?
Only if it has the three dot-separated base64url segments a JWT requires. Opaque tokens and session IDs carry no readable structure — there is nothing to decode.
Last updated 2026-08-22