JWT Expiration Decoder

Paste any JWT to decode header and payload, inspect exp/iat/nbf claims, and see expiration status. 100% in-browser, no signup.

⏱ UnixLi — Live Tool All processing local · No data sent

JWT Expiration Decoder

// Paste a JWT — extracts exp, iat, nbf and checks expiration status. Nothing is sent to a server.

Decode JWT expiration without a library

A JSON Web Token (JWT) packs claims into three Base64url segments separated by dots: header, payload, and signature. Time-related claims live in the payload as Unix seconds — not milliseconds. When you paste a token into this page, UnixLi only decodes the header and payload so you can read exp, iat, and nbf instantly. Nothing is uploaded; decoding stays inside your browser tab.

Example: Unix timestamp 1715429912 is Saturday, May 11, 2024 at 12:18:32 UTC. If a JWT exp equals that value, the token expired at that exact UTC instant, regardless of the viewer’s local timezone.

What JWT exp, iat, and nbf mean

The JWT profile (RFC 7519) defines registered claim names for time:

All three use the same unit: seconds since 1970-01-01T00:00:00Z. Comparing them to “now” is therefore a simple integer comparison once both sides are in Unix seconds. This tool highlights expiration status by comparing exp (and optionally nbf) against your local clock converted to UTC seconds.

How to decode a JWT payload without a library

You do not need a JWT library to inspect claims. Split the string on ., take the second segment, convert Base64url to standard Base64, then decode and parse JSON. Signature verification is a separate step that requires the secret or public key — this page never claims to verify signatures; it only shows what the payload says.

JavaScript (inspect only):

const [, payload] = token.split('.');
const json = atob(payload.replace(/-/g,'+').replace(/_/g,'/').padEnd(Math.ceil(payload.length/4)*4,'='));
const claims = JSON.parse(json);
// claims.exp → e.g. 1715429912 → 2024-05-11 12:18:32 UTC

Python (inspect only):

import base64, json
payload = token.split('.')[1]
pad = '=' * (-len(payload) % 4)
claims = json.loads(base64.urlsafe_b64decode(payload + pad))
print(claims.get('exp'))  # Unix seconds

In production, prefer battle-tested libraries (jose, jsonwebtoken, PyJWT) that verify the signature, check alg, and enforce clock skew. Use UnixLi when you need a fast, private look at expiration while debugging logs or support tickets.

Common JWT timestamp bugs

When to use this tool vs libraries

Use UnixLi JWT Decoder to paste a token from DevTools, an email, or a log line and see human-readable iat/nbf/exp without installing anything. Privacy matters: 100% in-browser processing means the JWT never leaves your tab — ideal for production tokens you should not paste into random online “JWT debugger” backends.

Use jose / jsonwebtoken / PyJWT inside applications to verify signatures, restrict algorithms, validate audiences, and reject tampered tokens. Decoding alone is never authentication.

Prefer our deeper guide: How to decode JWT expiration without a library. Also see the universal Unix timestamp parser, JavaScript timestamp snippets, and Python timestamp helpers.

Frequently asked questions

What do JWT exp, iat, and nbf mean?

They are registered time claims stored as Unix seconds (UTC). iat is issued-at, nbf is not-before (token invalid until then), and exp is expiration (token invalid after then). Example: 1715429912 is Saturday, May 11, 2024 at 12:18:32 UTC.

Does this tool verify the JWT signature?

No. Decoding the payload only Base64url-decodes the middle segment so you can read claims. Signature verification needs the signing secret or public key and a library such as jose or jsonwebtoken. Never treat a decoded token as authenticated.

Why does my JWT exp show a date in 1970 or far in the future?

Most often the claim was written in milliseconds instead of seconds. A 13-digit value like 1715429912000 must be divided by 1000. JWT specs require NumericDate in seconds since the Unix epoch.

Is my JWT sent to a server when I paste it here?

No. UnixLi JWT decoder runs entirely in your browser tab. The token never leaves your device — there is no upload, logging, or backend storage of pasted JWTs.

When should I use this tool instead of jose or jsonwebtoken?

Use this page for quick inspection of exp/iat/nbf while debugging. Use jose, jsonwebtoken, or PyJWT in application code when you must verify signatures, enforce algorithms, and reject tampered tokens.

How do I decode a JWT payload in one line of JavaScript?

Split on dots, Base64url-decode the second part, then JSON.parse. Pad the Base64url string and replace -/_ with +/ before atob. That inspects claims only — it does not verify the signature.

Related tools