Both segments decoded instantly
The Base64URL header and payload are unpacked into readable, indented JSON as soon as you paste, with no round trip to a server.
Decode the header and payload of a JSON Web Token and read its claims with this JWT decoder.
Loading tool…
The tool is loading its code on your device. This happens once and is cached for later visits.
Processed entirely on your device
Overview
Decode and inspect JSON Web Tokens online. View the header and payload as formatted JSON, read the exp, nbf and iat claims and check expiry — no verification, no upload.
A JSON Web Token is three Base64URL-encoded sections joined by dots: a header, a payload and a signature. The first two are ordinary JSON that has been encoded so it survives inside a URL, an HTTP header or a form field. Reading them needs no secret, which is what makes a JWT decoder possible at all — and also what makes the most important warning about JWTs so easy to forget.
This JWT decoder unpacks the header and payload of any token you paste, renders both as formatted JSON, converts the registered time claims into readable dates, and tells you whether the token is currently expired, not yet valid, or inside its window. A leading Bearer prefix is stripped automatically, and the signature is shown but clearly labelled as unchecked — because a decoder that implied verification would be a security trap.
Base64URL is standard Base64 with plus and slash replaced by hyphen and underscore and the padding removed, so the token is safe in a URL. Encoding is not encryption. Anyone holding a token can decode and read every claim, so a JWT payload is effectively public to whoever receives it.
This tool unpacks the header and payload and shows them to you. It does not check the signature, because that requires the issuer's secret or public key, which your browser does not have and should not want. A token can be perfectly readable and completely forged. The only component entitled to trust a JWT is the one that verifies the signature with the correct key, and that check belongs on the server, never in client-side code alone.
Standard claims use short registered names:
The exp, nbf and iat values are integers counting seconds since the Unix epoch, so this tool converts them to readable dates and tells you whether the token is currently expired, not yet valid, or inside its window.
Because the header states which algorithm signed the token, a naive verifier that believes that field can be tricked by an attacker who sets the algorithm to none and drops the signature entirely. Serious libraries reject an unverified or downgraded algorithm and make you declare which algorithms you accept. It is a neat illustration of the whole subject: reading a token and trusting a token are two completely different operations, and only the second one is a security decision.
Almost every "my token doesn't work" ticket ends the same way: someone decodes the JWT and reads the claims. The exp is in the past, or the aud does not match the resource server, or the issuer string has a typo, or the token is from the test tenant. A JWT decoder turns that hour of guessing into a thirty-second read — paste the token, look at the exp rendering, compare the iss and aud strings with what the server expects, and the problem usually names itself.
Access tokens carry user identifiers, scopes, tenant names and sometimes personal data. Pasting a live token into a hosted decoder means handing that material — plus the token itself, which until expiry is a bearer credential — to whoever operates the site. This JWT decoder runs entirely in the browser: the token is split, Base64URL-decoded and rendered locally, and nothing is transmitted or stored. Decode, read, close the tab.
Each one begins the same way: paste, decode, read. None of them requires the secret — which is precisely why decoding is safe to do anywhere, and verifying is not.
Step by step
Paste a JWT into the input panel; a leading Bearer prefix is stripped automatically.
Read the decoded header and payload as formatted JSON.
Check the time claims to see whether the token is expired or not yet valid.
Remember the signature is shown but never verified — that needs the issuer's key.
Why use it
What this tool is good for, and what it deliberately does not try to do.
The Base64URL header and payload are unpacked into readable, indented JSON as soon as you paste, with no round trip to a server.
The exp, nbf and iat numeric dates are converted to real timestamps and checked against the current clock, so you can see at a glance whether a token is still valid.
The signature is displayed but clearly labelled as unchecked, because a decoder that implied validation would be a security trap.
Access tokens carry user identifiers and scopes. Decoding happens in your tab, so a live token is never pasted into someone else's infrastructure.
Questions
Short, honest answers about quality, limits and privacy.