Skip to content
Tooletto

JWT Decoder

Paste a JWT to decode its header and payload, see when it expires, and check the standard claims. Decoding happens entirely in your browser, so production access tokens never leave your machine.

  • Files never leave your device
  • Free, no signup
  • No watermarks
  • Works offline once loaded
Loading tool…

How to jwt decoder

  1. 1

    Paste your token

    Paste the full JWT, including both dots. It decodes as you type.

  2. 2

    Read the claims

    The header and payload are formatted, with expiry and issued-at shown as readable dates.

  3. 3

    Copy what you need

    Copy the decoded payload as JSON for use elsewhere.

What the three parts of a JWT actually are

A JSON Web Token is three Base64URL-encoded segments joined by dots: a header describing the signing algorithm and token type, a payload holding the actual claims — who the token identifies, when it expires, what permissions it grants — and a signature computed over the first two segments using a secret or private key. Decoding, which is what this tool does, means Base64URL-decoding the first two segments back into readable JSON; it says nothing about the third segment beyond exposing its raw encoded value, because verifying that signature requires the actual signing secret, which a browser-based tool should never be asking you to paste in.

This distinction — decode versus verify — is the single most important thing to understand about a JWT debugging tool. Decoding tells you what a token *claims*; verifying tells you whether those claims can be *trusted*, by confirming the signature was produced by the expected issuer. A token can decode perfectly and display a payload claiming administrator access while being entirely forged, if nothing ever checks the signature against the real signing key.

Why a JWT is not a safe place for sensitive data

The header and payload are encoded, not encrypted — Base64URL is a reversible transformation with no secret involved, so anyone who obtains a token, whether by intercepting network traffic, reading browser storage, or being handed it directly, can decode the payload and read every claim inside it without needing any key at all. This is precisely why the standard advice is to keep JWT payloads limited to identifiers and non-sensitive claims — a user ID, a role, an expiry time — and never to place a password, a credit card number, or any other Confidential data directly inside the token, because the token format provides no confidentiality whatsoever on its own.

Reading exp, iat and nbf without doing the arithmetic yourself

The standard timestamp claims are stored as Unix time — a plain integer counting seconds since January 1, 1970 — which is efficient for machines to compare but unreadable at a glance for a person debugging a token by eye. Converting `1735689600` into "January 1, 2025, 00:00:00 UTC" by hand is exactly the kind of small, error-prone arithmetic that is easy to get wrong under time pressure, particularly across time zones. Rendering all three claims as actual local dates, and stating outright whether the token is currently expired, valid, or not yet active, turns a debugging session that would otherwise involve a side calculation into an immediate, readable answer.

Frequently asked questions

Is it safe to paste a production token here?

Safer than any server-based decoder: the token is split and Base64-decoded in your browser, with no network request involved. You can verify this by disconnecting from the internet — the tool still works. That said, treat any token you paste anywhere as one you should rotate.

Does this verify the signature?

No, and deliberately so. Verifying requires the signing secret or public key, and a browser tool asking you to paste your signing secret is a bad habit to encourage. Verification belongs in your backend, not in a web page.

Is a JWT encrypted?

No. The header and payload are Base64URL-encoded, which is encoding, not encryption — anyone holding the token can read every claim. Never put passwords, card numbers or personal data in a JWT payload.

What do exp, iat and nbf mean?

They are Unix timestamps in seconds. `exp` is when the token expires, `iat` when it was issued, and `nbf` the earliest time it may be accepted. This tool renders all three as local dates and tells you whether the token is currently valid.

Why does my token fail to decode?

A JWT must have exactly three dot-separated parts. The usual causes are a truncated copy, a leading "Bearer " prefix left in place, or a wrapping quote from a JSON response.