Loading...
Loading...
Paste a JSON Web Token to split it into header, payload, and signature. Timestamps like exp and iat are formatted into readable dates, and the claim table shows every field at a glance. Runs entirely in your browser.
A JSON Web Token (JWT) is a compact, URL-safe way to represent claims between two parties. It's three base64url-encoded segments joined by dots: a header that names the signing algorithm, a payload that carries the claims, and a signature that proves the token was issued by someone holding the signing key. JWTs are the default format for OAuth 2.0 access tokens, OpenID Connect ID tokens, and most stateless session systems. This decoder splits the token and shows the raw JSON for each segment — it does not verify the signature, because that would require the issuer's secret or public key.
Copy a JWT from an Authorization header, a debug log, or a URL. It should look like eyJ...eyJ...signature with three segments.
The header shows the algorithm (alg) and token type (typ). The payload lists every claim — sub, iss, aud, exp, iat, and any custom fields.
The validity banners tell you immediately if the token is expired, active, or not yet valid (nbf). Time claims are shown in both UTC and relative form.
Use the copy button on the header or payload panel to grab clean JSON for debugging, sharing, or pasting into another tool.
A JWT has three base64url segments joined by dots:
header.payload.signature
Header — JSON describing the signing algorithm
{ "alg": "HS256", "typ": "JWT" }
Payload — JSON carrying the claims
{ "sub": "1234", "exp": 1700000000 }
Signature — HMAC or RSA over header.payload, base64url-encoded
Standard time claims (seconds since epoch):
exp = expiration time
iat = issued at
nbf = not beforeThe header and payload are plain JSON that anyone can read — base64url is encoding, not encryption. The signature is what makes the token trustworthy: it's computed by the issuer using a secret key (for HS* algorithms) or a private key (for RS*/ES* algorithms) over the first two segments. A server that receives the token recomputes the signature with the matching secret or public key and rejects anything that doesn't match. That's why you should never put sensitive data like passwords in a payload, and why this tool only decodes — verifying requires the issuer's key.
Reference: RFC 7519 — JSON Web Token (JWT)
| Input | Output |
|---|---|
Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 | { "alg": "HS256", "typ": "JWT" } Minimal header for an HMAC-SHA256 token. |
Payload with exp claim | { "sub": "1234", "exp": 1700000000 } exp is seconds since epoch — 2023-11-14 in UTC. |
Expired token | Token expired · Expires 2024-01-01 (3 months ago) The validity banner flips red when exp is in the past. |
Malformed token (only two segments) | Invalid token: expected 3 segments, got 2 A JWT must have exactly three dots-separated base64url parts. |
Format, validate, and minify JSON with precise error line and column reporting.
Encode and decode Base64 text with optional URL-safe variant and UTF-8 support.
Convert between epoch numbers and dates with auto-detect for seconds vs milliseconds.
Calculate your exact age in years, months, and days from any date of birth.
Last updated