JWT-based authentication is a mechanism in which you can authorize a call to a Crossmint API, scoping such calls to impact resources related to a single end-user on your platform. You have two options available when enabling this option.
Third Party Authentication providers - There are several quality authentication providers in the market and you may already be using one of them. You can continue to use your existing auth tooling and enable Crossmint Wallets on top of them with minimal changes. Supported providers include Auth0, Firebase, Supabase, Stytch, and Kinde.
Custom JWT - This option is for providers not yet included with turn-key support or custom built solutions where you issue your own JWTs. You must be able to provide a JWKS endpoint to enable Crossmint to authenticate tokens.
Crossmint’s Wallets SDK requires JWT Authentication be enabled.
You can also configure it from your terminal with crossmint projects auth-provider, or ask your AI agent to, through the projects_auth_provider_get and projects_auth_provider_set tools of the Crossmint MCP server. To make a client key require JWT auth from there, use crossmint keys create --requires-jwt-auth / crossmint keys edit <key-id> --requires-jwt-auth, or the requiresJwtAuth field of the keys_create and keys_edit tools.
For projects that have already implemented authentication using one of the supported providers, you can provide Crossmint with the appropriate project/environment/app ID from the settings page of the third party. Supported providers include: Dynamic, Auth0, Stytch, Privy, Firebase, Kinde, and Supabase.To use this option, select the 3P Auth providers option, then choose your provider from the dropdown. Next, you’ll need to find the appropriate ID that your provider gives you to identify your project. This can typically be found within the settings pane of their web interface.
If your project is using an auth provider not listed in the 3P providers list or is a home-grown JWT solution, you can choose the Custom tokens option. You will need to be able to provide a that Crossmint can use to authenticate the JWTs.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Crossmint Docs","colors":{"primary":"#36b37e","light":"#87ff8f","dark":"#001d01"},"logo":{"light":"https://mintcdn.com/crossmint/a8gPOTKEuVFcSfC3/logo/crossmint-light.png?fit=max\u0026auto=format\u0026n=a8gPOTKEuVFcSfC3\u0026q=85\u0026s=8c2671e4c8f7da6956e1508bd68c2928","dark":"https://mintcdn.com/crossmint/a8gPOTKEuVFcSfC3/logo/crossmint-dark.png?fit=max\u0026auto=format\u0026n=a8gPOTKEuVFcSfC3\u0026q=85\u0026s=272ecc17664d17b9ff24471758ff80b2"},"favicon":"https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/favicon.png?fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=00fb89ddf6ba5b1022b9307039c08006","api":{"openapi":["api-reference/_open-api/MintingAPIs.json","api-reference/_open-api/AdminAPIs.json","api-reference/_open-api/VerifiableCredentialsAPIs.json","api-reference/_open-api/Wallets.json"],"examples":{"prefill":true}},"background":{"color":{"dark":"#090b0c"}},"navbar":{"links":[{"href":"https://www.crossmint.com/contact","label":"Support"},{"href":"https://staging.crossmint.com/console","label":"Staging Console"}],"primary":{"type":"button","label":"Console","href":"https://www.crossmint.com/console"}},"footer":{"socials":{"website":"https://www.crossmint.com","twitter":"https://twitter.com/crossmint","github":"https://github.com/crossmint"}},"integrations":{"ga4":{"measurementId":"G-CP5EDD6GVT"},"posthog":{"apiKey":"phc_tfgodwfjuO9v3Nw0tIWJNzACoi2opL7X2Ly0Mg2UCTz","apiHost":"https://eu.i.posthog.com","sessionRecording":false}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"crossmint","hasAudioNarration":false,"actualSubdomain":"crossmint","customDomains":["docs.crossmint.com"],"gitSource":{"type":"github","owner":"paella-labs","repo":"crossbit-main","deployBranch":"main","contentDirectory":"apps/crossmint-mintlify-docs/src","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true,"contextualFeedback":{"allowEmail":true},"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aee6eeb3d2baf3afdd01b5f","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":1063},{"language":"default","tag":"Wallets","count":850},{"language":"default","tag":"Kotlin SDK","count":413},{"language":"default","tag":"Swift SDK","count":227},{"language":"default","tag":"Checkout","count":186},{"language":"default","tag":"Classes","count":180},{"language":"default","tag":"Data Classes","count":169},{"language":"default","tag":"Typescript SDK","count":151},{"language":"default","tag":"Guides","count":134},{"language":"default","tag":"REST","count":122}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":false,"deflection":{"enabled":true,"type":"link","url":"https://www.crossmint.com/contact/sales"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".tab-container [data-component-part=\"tabs-list\"]{flex-wrap:wrap;overflow:visible;row-gap:0.25rem}.tab-container [data-component-part=\"tabs-list\"]>li{white-space:nowrap}.nav-dropdown-item,.nav-dropdown-item *{font-weight:500!important;color:rgb(75, 85, 99)!important}.nav-dropdown-item:hover,.nav-dropdown-item:hover *{color:rgb(31, 41, 55)!important}.dark .nav-dropdown-item,.dark .nav-dropdown-item *{color:rgb(156, 163, 175)!important}.dark .nav-dropdown-item:hover,.dark .nav-dropdown-item:hover *{color:rgb(209, 213, 219)!important}"}],"page":{"pagePath":"introduction/platform/api-keys/jwt-authentication","slug":"/introduction/platform/api-keys/jwt-authentication","pageMetadata":{"title":"JWT Authentication","description":"Enable advanced security for client-side API Keys","href":"/introduction/platform/api-keys/jwt-authentication"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Enable advanced security for client-side API Keys\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Frame,Heading,OptimizedImage,Table,Tip,Tooltip}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`JWT-based authentication is a mechanism in which you can authorize a call to a Crossmint API, scoping such calls to impact resources related to a single end-user on your platform. You have two options available when enabling this option.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Third Party Authentication providers`}),` - There are several quality authentication providers in the market and you may already be using one of them. You can continue to use your existing auth tooling and enable Crossmint Wallets on top of them with minimal changes. Supported providers include Auth0, Firebase, Supabase, Stytch, and Kinde.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Custom JWT`}),` - This option is for providers not yet included with turn-key support or custom built solutions where you issue your own JWTs. You must be able to provide a JWKS endpoint to enable Crossmint to authenticate tokens.`]}),`\n`]}),`\n`,_jsxs(Tip,{children:[`Crossmint’s Wallets SDK `,_jsx(_components.strong,{children:`requires`}),` JWT Authentication be enabled.`]}),`\n`,_jsxs(_components.p,{children:[`You can also configure it from your terminal with `,_jsx(_components.a,{href:`/cli/projects/auth-provider`,children:_jsx(_components.code,{children:`crossmint projects auth-provider`})}),`, or ask your AI agent to, through the `,_jsx(_components.code,{children:`projects_auth_provider_get`}),` and `,_jsx(_components.code,{children:`projects_auth_provider_set`}),` tools of the `,_jsx(_components.a,{href:`/mcp-server/tools`,children:`Crossmint MCP server`}),`. To make a client key require JWT auth from there, use `,_jsx(_components.code,{children:`crossmint keys create --requires-jwt-auth`}),` / `,_jsx(_components.code,{children:`crossmint keys edit \u003ckey-id> --requires-jwt-auth`}),`, or the `,_jsx(_components.code,{children:`requiresJwtAuth`}),` field of the `,_jsxs(_components.a,{href:`/mcp-server/tools#api-keys`,children:[_jsx(_components.code,{children:`keys_create`}),` and `,_jsx(_components.code,{children:`keys_edit`}),` tools`]}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`which-products-need-a-user-jwt`,children:`Which Products Need a User JWT`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Product`}),_jsx(_components.th,{children:`User JWT`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Wallets (client-side API key)`}),_jsx(_components.td,{children:`Required`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Agents: order intents and buyer inputs`}),_jsx(_components.td,{children:`Required`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Agents: browser profiles`}),_jsx(_components.td,{children:`JWT or server-side API key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Payment methods (save, list, delete)`}),_jsx(_components.td,{children:`JWT or server-side API key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Checkout orders`}),_jsxs(_components.td,{children:[`Optional. The credential depends on the call. See the `,_jsx(_components.a,{href:`/api-reference/headless/create-order`,children:`Checkout API reference`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Onramp, Offramp, Identity`}),_jsx(_components.td,{children:`Not used. A server-side API key creates the order or session. Client-side calls use the token from that session.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`third-party-authentication`,children:`Third Party Authentication`}),`\n`,_jsx(_components.p,{children:`For projects that have already implemented authentication using one of the supported providers, you can provide Crossmint with the appropriate project/environment/app ID from the settings page of the third party. Supported providers include: Dynamic, Auth0, Stytch, Privy, Firebase, Kinde, and Supabase.`}),`\n`,_jsx(_components.p,{children:`To use this option, select the 3P Auth providers option, then choose your provider from the dropdown. Next, you’ll need to find the appropriate ID that your provider gives you to identify your project. This can typically be found within the settings pane of their web interface.`}),`\n`,_jsx(Frame,{type:`simple`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=717730f83f13d11737d8779d3fd30d81`,alt:`select third party Auth in Crossmint developer console`,\"data-og-width\":`3000`,width:`3000`,\"data-og-height\":`1422`,height:`1422`,\"data-path\":`images/api-reference/3p-auth.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=63f0dfcf518e1d87019861d30715cab5 280w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=17d2eec58bae8dd6c025805f4a3fea0f 560w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=fa305549f5bcc1e200de87c608602a9e 840w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=4fd2cb9c7af42827cac416b363a8a476 1100w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=a5bc9b62b58e402c66d01b598d918bf6 1650w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/3p-auth.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=f762dcf7580782e1043924bab4102327 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`custom-jwt-auth`,children:`Custom JWT Auth`}),`\n`,_jsxs(_components.p,{children:[`If your project is using an auth provider not listed in the 3P providers list or is a home-grown JWT solution, you can choose the Custom tokens option. You will need to be able to provide a `,_jsx(Tooltip,{tip:`JWKS (JSON Web Key Set) endpoint is a URL that hosts public cryptographic keys in a JSON format. These keys are used by external systems to verify the authenticity of JWTs (JSON Web Tokens) issued by your service. This endpoint allows client applications to retrieve the keys necessary for verifying tokens without hard-coding them, enhancing security by enabling key rotation and other cryptographic best practices`,children:`JWKS endpoint`}),` that Crossmint can use to authenticate the JWTs.`]}),`\n`,_jsx(Frame,{type:`simple`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=744137f34cf4864bff4999167283527b`,alt:`select third party Auth in Crossmint developer console`,\"data-og-width\":`3000`,width:`3000`,\"data-og-height\":`1474`,height:`1474`,\"data-path\":`images/api-reference/custom-auth.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=b26f6265aa05e0efaf312132913f6703 280w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=c9e2e811ef03f314a47e0dc55e7785f6 560w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=3810d17ab2b02c1edee0154dbb84605f 840w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=19fce7a020207a452fd1ccb91b0d3f13 1100w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=f8676e90422200b29a748bd7f6180862 1650w, https://mintcdn.com/crossmint/xq66q9GV6z6jjj95/images/api-reference/custom-auth.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=xq66q9GV6z6jjj95\u0026q=85\u0026s=069b88afcea6f3c8a34ef9886bfea557 2500w`})}),`\n`,_jsxs(_components.p,{children:[`For a detailed guide on implementing this approach, check out the `,_jsx(_components.a,{href:`/introduction/platform/api-keys/custom-jwt-auth-guide`,children:`Custom JWT Authentication Guide`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"JWT Authentication","description":"Enable advanced security for client-side API Keys","href":"/introduction/platform/api-keys/jwt-authentication"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Which Products Need a User JWT","slug":"which-products-need-a-user-jwt","depth":2,"children":[]},{"title":"Third Party Authentication","slug":"third-party-authentication","depth":2,"children":[]},{"title":"Custom JWT Auth","slug":"custom-jwt-auth","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/crossmint/d1c432d03c0c4224/scripts/dd.js","/_mintlify/custom/crossmint/7fc8d54052d3edb0/scripts/hubspot.js"],"subdomain":"crossmint","siteName":"Crossmint Docs","title":"JWT Authentication - Crossmint Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T00:19:02.549Z","originalFileLocation":"introduction/platform/api-keys/jwt-authentication.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Enable advanced security for client-side API Keys\">\u003cmeta data-mint-head name=\"application-name\" content=\"Crossmint Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"JWT Authentication - Crossmint Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Enable advanced security for client-side API Keys\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Crossmint Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://crossmint.mintlify.site/_mintlify/api/og/v2?division=API+Keys\u0026amp;title=JWT+Authentication\u0026amp;description=Enable+advanced+security+for+client-side+API+Keys\u0026amp;theme=754218d9ca07cbe75c9ed33a\u0026amp;signature=b5571b6a22d41f383fbe829b4c02809cb3179a2d4fb7e240725b92c10695023b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"JWT Authentication - Crossmint Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Enable advanced security for client-side API Keys\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://crossmint.mintlify.site/_mintlify/api/og/v2?division=API+Keys\u0026amp;title=JWT+Authentication\u0026amp;description=Enable+advanced+security+for+client-side+API+Keys\u0026amp;theme=754218d9ca07cbe75c9ed33a\u0026amp;signature=b5571b6a22d41f383fbe829b4c02809cb3179a2d4fb7e240725b92c10695023b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/crossmint/-1hhMU0vchFPUD3H/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Crossmint Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#36b37e\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/introduction/platform/api-keys/jwt-authentication.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.crossmint.com/#organization\",\"name\":\"Crossmint Docs\",\"url\":\"https://docs.crossmint.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/crossmint/a8gPOTKEuVFcSfC3/logo/crossmint-light.png?fit=max\u0026auto=format\u0026n=a8gPOTKEuVFcSfC3\u0026q=85\u0026s=8c2671e4c8f7da6956e1508bd68c2928\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.crossmint.com#website\",\"name\":\"Crossmint Docs\",\"url\":\"https://docs.crossmint.com\",\"publisher\":{\"@id\":\"https://docs.crossmint.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication#webpage\",\"url\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication\",\"name\":\"JWT Authentication\",\"description\":\"Enable advanced security for client-side API Keys\",\"dateModified\":\"2026-10-23T00:19:02.549Z\",\"isPartOf\":{\"@id\":\"https://docs.crossmint.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Introduction\",\"item\":\"https://docs.crossmint.com/introduction/platform-overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Platform\",\"item\":\"https://docs.crossmint.com/introduction/supported-chains\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"API Keys\",\"item\":\"https://docs.crossmint.com/introduction/platform/api-keys/overview\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"JWT Authentication\",\"item\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication#article\",\"headline\":\"JWT Authentication\",\"name\":\"JWT Authentication\",\"description\":\"Enable advanced security for client-side API Keys\",\"url\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication\",\"mainEntityOfPage\":{\"@id\":\"https://docs.crossmint.com/introduction/platform/api-keys/jwt-authentication#webpage\"},\"dateModified\":\"2026-10-23T00:19:02.549Z\",\"publisher\":{\"@id\":\"https://docs.crossmint.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.crossmint.com#website\"}}]}\u003c/script>","siteName":"Crossmint Docs","nav":{"global":null,"tabs":[{"tab":"Get Started","groups":[{"group":"Introduction","pages":[{"title":"Platform Overview","href":"/introduction/platform-overview"},{"title":"Getting Started","href":"/introduction/getting-started"},{"title":"Using AI Assistants","href":"/introduction/ai-assistants"},{"group":"Platform","pages":[{"title":"Supported Chains","mode":"default","href":"/introduction/supported-chains"},{"title":"Staging vs Production Environments","sidebarTitle":"Staging vs Production","href":"/introduction/platform/staging-vs-production"},{"title":"Account Verification","href":"/introduction/platform/account-verification"},{"title":"Organizations","href":"/introduction/platform/organizations"},{"title":"Project and Team Management","sidebarTitle":"Project \u0026 Team Management","href":"/introduction/platform/projects-and-user-management"},{"group":"API Keys","pages":[{"title":"Overview","href":"/introduction/platform/api-keys/overview"},{"title":"Rate Limits","href":"/introduction/platform/api-keys/rate-limits"},{"title":"Scopes","href":"/introduction/platform/api-keys/scopes"},{"title":"Server-side Keys","href":"/introduction/platform/api-keys/server-side"},{"title":"Client-side Keys","description":"How to create and use client-side API keys","href":"/introduction/platform/api-keys/client-side"},{"title":"JWT Authentication","href":"/introduction/platform/api-keys/jwt-authentication"},{"title":"Custom JWT Authentication","description":"Configuring JWT-based authentication with Crossmint","href":"/introduction/platform/api-keys/custom-jwt-auth-guide"}]},{"group":"Webhooks","pages":[{"title":"Overview","href":"/introduction/platform/webhooks/overview"},{"title":"Add an Endpoint","href":"/introduction/platform/webhooks/add-endpoint"},{"title":"Verify Webhooks","href":"/introduction/platform/webhooks/verify-webhooks"},{"title":"Best Practices","href":"/introduction/platform/webhooks/best-practices"}]},{"group":"Admin API","pages":[{"group":"Project Usage","pages":[{"openapi":"api-reference/_open-api/AdminAPIs.json GET /v1-alpha1/projects/{projectId}/usage","title":"Get Usage","href":"/api-reference/admin/get-usage"}]}]}]}]},{"group":"Solution Guides","pages":[{"title":"Overview","href":"/solutions/overview"},{"group":"Fintech","pages":[{"title":"Remittances","href":"/solutions/fintech/remittances"},{"title":"Neobanks","href":"/solutions/fintech/neobanks"},{"title":"Stablecoin Payouts","href":"/solutions/fintech/stablecoin-payouts"},{"title":"Global Payroll","href":"/solutions/fintech/global-payroll"}]},{"group":"n8n","pages":[{"title":"Overview","href":"/solutions/n8n/overview"},{"title":"Quickstart ⚡","href":"/solutions/n8n/quickstart"},{"group":"Nodes","pages":[{"title":"Wallets Node","href":"/solutions/n8n/nodes/wallets"},{"title":"Checkout Trigger Node (x402 Paywall)","href":"/solutions/n8n/nodes/checkout-trigger"}]}]}]},{"group":"CLI","pages":[{"title":"Get started with the Crossmint CLI","sidebarTitle":"Getting started","href":"/cli/install"},{"group":"Commands","pages":[{"title":"Crossmint login","sidebarTitle":"crossmint login","href":"/cli/login"},{"title":"Crossmint logout","sidebarTitle":"crossmint logout","href":"/cli/logout"},{"title":"Crossmint whoami","sidebarTitle":"crossmint whoami","href":"/cli/whoami"},{"title":"Crossmint help","sidebarTitle":"crossmint help","href":"/cli/help"},{"title":"Crossmint keys create","sidebarTitle":"crossmint keys create","href":"/cli/keys/create"},{"title":"Crossmint keys list","sidebarTitle":"crossmint keys list","href":"/cli/keys/list"},{"title":"Crossmint keys delete","sidebarTitle":"crossmint keys delete","href":"/cli/keys/delete"},{"title":"Crossmint keys edit","sidebarTitle":"crossmint keys edit","href":"/cli/keys/edit"},{"title":"Crossmint projects create","sidebarTitle":"crossmint projects create","href":"/cli/projects/create"},{"title":"Crossmint projects select","sidebarTitle":"crossmint projects select","href":"/cli/projects/select"},{"title":"Crossmint projects list","sidebarTitle":"crossmint projects list","href":"/cli/projects/list"},{"title":"Crossmint projects details","sidebarTitle":"crossmint projects details","href":"/cli/projects/details"},{"title":"Crossmint projects auth-provider","sidebarTitle":"crossmint projects auth-provider","href":"/cli/projects/auth-provider"}]}]},{"group":"MCP Server","pages":[{"title":"Connect the Crossmint MCP Server","sidebarTitle":"Connect","href":"/mcp-server/connect"},{"title":"Crossmint MCP Server Tools","sidebarTitle":"Tools","href":"/mcp-server/tools"}]}]},{"tab":"Wallets","pages":[{"title":"Wallets","href":"/wallets/overview"}]},{"tab":"Identity","pages":[{"title":"Identity","href":"/identity/overview"}]},{"tab":"Stablecoin Orchestration","pages":[{"title":"Stablecoin Orchestration","href":"/stablecoin-orchestration/overview"}]},{"tab":"Checkout","pages":[{"title":"Checkout","href":"/payments/introduction"}]},{"tab":"Onramp","pages":[{"title":"Onramp","href":"/onramp/overview"}]},{"tab":"Offramp","pages":[{"title":"Offramp","href":"/offramp/overview"}]},{"tab":"Agents","pages":[{"title":"Agents","href":"/agents/overview"}]},{"tab":"Others","menu":[{"item":"Tokenization","pages":[{"title":"Tokenization","href":"/tokenization/introduction"}]}],"pages":[{"title":"Others","href":"/tokenization/introduction"}]}]},"basePath":"","title":"JWT Authentication - Crossmint Docs","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DvzxQbD0.js","DynamicMarkdown-mQG_iQiE.js","zoom-image-lightbox-BFbLClTf.js","lightbox-handle-r17bVUz3.js"]}