šŸ“ Sign Up | šŸ” Log In

← Root | ↑ Up

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ šŸ“„ shadcn/directory/clerk/clerk-docs/reference/backend/sessions/get-token │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

╔══════════════════════════════════════════════════════════════════════════════════════════════╗
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘

title: '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>

Parameters

<Properties> - `sessionId` - `string`

The ID of the session to retrieve a token for.


  • template
  • string

The 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>

Example

<Include src="_partials/backend/usage" />
const sessionId = 'sess_123'

const template = 'test'

const response = await clerkClient.sessions.getToken(sessionId, template)

Examples with frameworks

The following examples demonstrate how to use getToken() with different frameworks. Each example performs the following steps:

  1. Gets the current session ID using framework-specific auth helpers.
  2. Checks if there's an active session.
  3. Uses the JS Backend SDK's getToken() method to generate a token from a template.
  4. Returns the token in the response.

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>

Backend API (BAPI) endpoint

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.

ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•

← Root | ↑ Up