CODDY Tool

JWT Decoder

Decode a JWT's header and payload, and check its expiry — no secret required.

Paste a JSON Web Token to see its header and payload as readable JSON, plus a plain-language read on whether it has expired. The signature is never verified, because that needs the issuer's key, which no browser-side tool can have.

Everything you enter stays in this browser tab. Nothing is sent to our servers, logged or stored.

Loading tool…

About JWT Decoder

A JWT is three Base64url segments joined by dots — header, payload, signature. The first two are just encoded JSON, so reading them needs no key at all, which is exactly the point of this tool and exactly why a JWT should never be treated as confidential. Anyone holding the token, or anyone it merely passes through, can read every claim inside it.

The signature is the part that actually proves anything, and verifying it requires the algorithm and secret (or public key) the issuer signed with — something a page running in your browser has no way to obtain, and should not be trusted with even if it could. This decodes; it does not and cannot tell you whether the token is genuine.

Where this saves real time is the payload's registered claims. exp, iat and nbf are Unix timestamps, unreadable at a glance, and this converts them to a date and a plain relative description — 'expired 2 hours ago' is immediately useful in a way that 1700003600 is not.

How to decode a JWT

  1. Paste the token

    The full string, including all three dot-separated parts.

  2. Read the claims

    Header and payload appear as formatted JSON, with expiry called out separately.

  3. Check the status

    Expires, Issued and Not valid before are read from the exp, iat and nbf claims when present.

Why the signature can't be verified here

Verifying a JWT means recomputing its signature with the same algorithm and key the issuer used, then comparing the result byte for byte. For an HMAC-signed token that key is a shared secret; for an RSA- or ECDSA-signed one it is at least the issuer's public key. A tool running entirely in the visitor's browser has neither, and a tool that asked for the secret to 'verify' a token would be asking you to hand over the one thing that must never leave your server.

Verification belongs in the backend that issued the token, using a proper JWT library and the actual signing key. What this page tells you — whether the token is well-formed, what it claims, and whether it has expired — is useful for debugging, but it is not proof of authenticity.

Frequently asked questions

Does this verify the signature?

No, and no browser-side tool honestly can. Verification requires the issuer's secret or public key, which a page you are visiting has no legitimate way to obtain. This only decodes the header and payload, which need no key at all.

Is it safe to paste a real JWT here?

Decoding happens entirely in this browser tab and the token is never transmitted, but a live token can often be used to impersonate its owner until it expires, regardless of where it is pasted. Prefer a token you have already invalidated, or the example provided, when you just want to see how the tool works.

Why does it say there is no exp claim?

The exp (expiry) claim is optional in the JWT specification, though most real-world tokens include one. Without it there is nothing to compare the current time against, so expiry cannot be determined either way.

What is the difference between JWT and Base64?

A JWT's header and payload are Base64url-encoded JSON, so decoding one is Base64 decoding plus a JSON parse. Base64url differs from standard Base64 in two characters (- and _ instead of + and /) specifically so the result is safe to put in a URL without escaping.

Can I decode just the payload?

Paste the whole token — this splits it into its three parts automatically. If you only have one segment on its own, the Base64 decoder will read it as long as you know which one it is.

All Developer Tools

JWT Decoder is free to use with no account, no watermark and no usage limits. Last updated 3 September 2026.