JWT Decoder
decode JWT tokens and inspect header, payload, and claims
By Bikram NathLast updated
Paste a JWT and it splits the token at the two dots, base64url-decodes each segment, and renders the header, payload, and signature as formatted JSON. Useful when you have a token like `eyJhbGciOiJSUzI1NiJ9...` from an Authorization header and need to confirm the `exp` claim without spinning up a debugger or curl. Unlike jwt.io, nothing leaves your browser tab.
Try it now — free, instant, no signup
What is JWT Decoder?
A JWT is three base64url-encoded segments joined by dots. This tool splits on those dots, runs each segment through a base64url decoder (padding-aware, replacing `-` with `+` and `_` with `/`), then JSON-parses the result and pretty-prints it so you can read fields like `iss`, `sub`, `aud`, and `exp` at a glance. Example: drop in a token and immediately see that `exp` is `1716076800`, which you can mentally compare to a Unix timestamp or read as the rendered UTC date the tool shows.
When you already have Postman open, its built-in JWT decoder under the Authorization tab is faster for tokens attached to a request. If you only need to inspect the payload and you have Node.js available, `JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString())` in a REPL takes three seconds. This tool earns its place when you are on a machine without Node, inside a browser-only environment, or when you want a clean visual split of header versus payload without writing a one-liner.
One gotcha that catches developers regularly: the `exp` and `iat` claims are Unix timestamps in seconds, not milliseconds. JavaScript's `Date` constructor expects milliseconds, so if you copy the raw `exp` value and pass it to `new Date(exp)` you will get a date in 1970. Multiply by 1000 first. Also, decoding a JWT here tells you what the token claims, not whether the signature is valid — verifying the HMAC or RSA signature requires the secret or public key, which this client-side tool intentionally does not handle.