āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā š shadcn/directory/clerk/clerk-docs/reference/backend/sessions/get-token ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
getToken()'
description: Use Clerk's JS Backend SDK to retrieve a token for a JWT template that is defined in the Clerk Dashboard.
sdk: js-backend{/* clerk/javascript file: https://github.com/clerk/javascript/blob/main/packages/backend/src/api/endpoints/SessionApi.ts/#L51 */}
Retrieves a token for a JWT Template that is defined on the JWT templates page in the Clerk Dashboard.
function getToken(sessionId: string, template: string): Promise<Token>
The ID of the session to retrieve a token for.
templatestringThe name of the JWT template from the Clerk Dashboard to generate a new token from. For example: 'firebase', 'grafbase', or your custom template's name. </Properties>
const sessionId = 'sess_123'
const template = 'test'
const response = await clerkClient.sessions.getToken(sessionId, template)
The following examples demonstrate how to use getToken() with different frameworks. Each example performs the following steps:
getToken() method to generate a token from a template.The token resembles the following:
{
jwt: 'eyJhbG...'
}
[!NOTE] For these examples to work, you must have a JWT template named "test" in the Clerk Dashboard before running the code.
<Tabs items={["Next.js", "Express", "Remix"]}> <Tab> <CodeBlockTabs options={["App Router", "Pages Router"]}> ```js {{ filename: 'app/api/get-token-example/route.ts' }} import { auth, clerkClient } from '@clerk/nextjs/server'
export async function GET() {
const { sessionId } = await auth()
if (!sessionId) {
return Response.json({ message: 'Unauthorized' }, { status: 401 })
}
const template = 'test'
const client = await clerkClient()
const token = await client.sessions.getToken(sessionId, template)
return Response.json({ token })
}
```
```ts {{ filename: 'pages/api/getToken.ts' }}
import { clerkClient, getAuth } from '@clerk/nextjs/server'
import type { NextApiRequest, NextApiResponse } from 'next'
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const { sessionId } = getAuth(req)
if (!sessionId) {
return res.status(401).json({ error: 'Unauthorized' })
}
const template = 'test'
const client = await clerkClient()
const token = await client.sessions.getToken(sessionId, template)
return res.json({ token })
}
```
</CodeBlockTabs>
</Tab>
<Tab>
```js {{ filename: 'getToken.ts' }}
import { clerkClient } from '@clerk/express'
app.get('/api/get-token', async (req, res) => {
const sessionId = req.auth.sessionId
if (!sessionId) {
res.status(401).json({ error: 'Unauthorized' })
return
}
const template = 'test'
const token = await clerkClient.sessions.getToken(sessionId, template)
res.json({ token })
})
```
</Tab>
<Tab>
```ts {{ filename: 'app/routes/get-token.ts' }}
import { createClerkClient } from '@clerk/remix/api.server'
import { getAuth } from '@clerk/remix/ssr.server'
import { ActionFunction, json } from '@remix-run/node'
export const action: ActionFunction = async (req) => {
const { sessionId } = await getAuth(req)
const template = 'test'
const token = await createClerkClient({
secretKey: process.env.CLERK_SECRET_KEY,
}).sessions.getToken(sessionId, template)
return json({ token })
}
```
</Tab>
</Tabs>
This method in the SDK is a wrapper around the BAPI endpoint POST/sessions/{session_id}/tokens/{template_name}. See the BAPI reference{{ target: '_blank' }} for more information.
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā