Paste a JSON Web Token to read its header, payload and claims, see exactly when it expires, and optionally verify an HMAC signature. Everything runs in your browser.
Last updated: April 2026
Your token never leaves this page. Decoding and signature verification run locally in your browser using JavaScript and the Web Crypto API. Nothing is uploaded, logged or stored. Open your browser's network tab while you decode and you will see no request go out.
Times are shown in your local time zone () alongside the raw value from the token.
The secret is used only inside your browser's Web Crypto API and is never transmitted.
header.payload.signature.A JSON Web Token is not encrypted. It is three pieces of base64url encoded text joined by dots, and the first two are plain readable JSON to anyone who has the token. The signature is what makes a JWT trustworthy, and it can only be checked by whoever holds the key.
alg) and token type (typ). A kid value points at which key was used.iss, sub, aud, exp, nbf, iat and jti; everything else is yours.Because the payload is readable, never put anything secret in it. A JWT is a signed statement, not a sealed envelope.
On this page, yes. Decoding happens entirely in your browser and the token is never sent to a server, never logged and never stored. You can confirm this by opening your browser's network tab while decoding: no request is made. Even so, treat any JWT you hold as a live credential, and prefer an expired or test token when using any online tool.
No. The header and payload are only base64url encoded, not encrypted, so anyone can read them without a key. Decoding proves nothing about authenticity. A token is only trustworthy once its signature has been verified against the issuer's secret or public key, and the exp, nbf, iss and aud claims have been checked.
You can verify HMAC signatures (HS256, HS384 and HS512) by entering the shared secret. Verification uses the browser's built-in Web Crypto API, so the secret also stays on your machine. RSA and ECDSA tokens (RS*, PS*, ES*) are decoded and their algorithm is shown, but signature verification for those is not offered here.
The exp claim is a Unix timestamp in seconds, not milliseconds. A token generated with a millisecond timestamp pushes the expiry thousands of years into the future, which is a common bug. This decoder shows the exact date it read so you can spot that immediately.
iss issuer, sub subject (usually the user id), aud audience, exp expiry time, nbf not valid before, iat issued at, jti unique token id. All are optional; any other claim is application specific.