Base64URL, not Base64
JWT segments use URL-safe Base64 (- / _, no padding). The decoder restores padding and maps characters before UTF-8 decoding.
Paste a compact JWT on the left. Decoding stays in your browser and does not verify signatures.
Public jwt.io documentation sample (HS256, not for production)
Decoding runs entirely in your browser. Tokens are never uploaded to our servers. This tool does not verify signatures — treat decoded claims as untrusted until you validate them with your own key or JWKS.
Paste a compact token, read the header and payload as JSON, and remember: this page does not verify signatures.
Drop a three-part token into the left panel (optional Bearer prefix is fine). If you only have the payload JSON already, open the JSON viewer instead.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cThe right panel shows pretty-printed JSON for header and payload plus the raw signature string. alg and typ appear in the status bar when present.
{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
},
"signature": "SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"note": "Signature shown as Base64URL only — this tool does not verify signatures."
}Copy the decoded JSON for notes or debugging. Validate the token with your IdP or a server library before trusting any claim in production.
What this decoder reads from a compact token.
| Part | What you see |
|---|---|
| Header (1st segment) | Base64URL → JSON object (alg, typ, kid, …) |
| Payload (2nd segment) | Base64URL → JSON object (claims) |
| Signature (3rd segment) | Raw Base64URL string — not verified |
JWT segments use URL-safe Base64 (- / _, no padding). The decoder restores padding and maps characters before UTF-8 decoding.
Anyone can craft a token with arbitrary claims. Without signature verification, treat decoded fields as hints for debugging only.
A deliberate limit so the page stays fully client-side and key-free.
Verifying HS256 needs a shared secret; RS256/ES256 need a public key or JWKS fetch. Keeping keys out of this page avoids accidental leakage.
After inspecting claims here, validate the token with Auth0, Cognito, Firebase, or your API middleware before authorizing a request.
Some libraries historically accepted unsigned tokens. This decoder will show alg when present but will never treat a missing or none algorithm as verified.
When a JWT decoder helps — and when to switch tools.
Read exp / iat from the payload while reproducing a 401. Convert Unix seconds offline; this page leaves them as numbers.
Confirm aud, iss, and azp match the API you called. Mismatches often look like signature failures in server logs.
If a claim embeds a stringified JSON blob, copy that string into String to JSON or JSON Beautifier.
JSON helpers that pair with token debugging.
Send decoded payload JSON through the JSON formatter or beautifier.
Open large payloads in the JSON viewer with folding.
Use String to JSON when a claim contains escaped JSON text.
JWT decoder questions about Base64URL, signatures, Bearer tokens and privacy
Edit, format, and beautify JSON
Validate, fix, and inspect JSON
Compare, measure, and map JSON
Convert JSON to other formats
Convert other formats to JSON
Convert, format, fix, and minify XML
Generate code and format other languages