import { CodeTabs, CodeTab } from "docs-ui" export const metadata = { title: `Examples of the API Key Module`, } # {metadata.title} In this guide, you’ll find common examples of how you can use the API Key Module in your application. ## Create an API Key ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/medusa" import { IApiKeyModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/utils" export async function POST(request: MedusaRequest, res: MedusaResponse) { const apiKeyModuleService: IApiKeyModuleService = request.scope.resolve( ModuleRegistrationName.API_KEY ) const apiKey = await apiKeyModuleService.createApiKeys({ title: "Publishable API key", type: "publishable", created_by: "user_123", }) res.json({ api_key: apiKey, }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeApiKeyModule } from "@medusajs/api-key" export async function POST(request: Request) { const apiKeyModuleService = await initializeApiKeyModule() const apiKey = await apiKeyModuleService.createApiKeys({ title: "Publishable API key", type: "publishable", created_by: "user_123", }) return NextResponse.json({ api_key: apiKey, }) } ``` --- ## List API Keys ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/medusa" import { IApiKeyModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/utils" export async function GET(request: MedusaRequest, res: MedusaResponse) { const apiKeyModuleService: IApiKeyModuleService = request.scope.resolve( ModuleRegistrationName.API_KEY ) res.json({ api_keys: await apiKeyModuleService.listApiKeys(), }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeApiKeyModule } from "@medusajs/api-key" export async function GET(request: Request) { const apiKeyModuleService = await initializeApiKeyModule() return NextResponse.json({ api_keys: await apiKeyModuleService.listApiKeys(), }) } ``` --- ## Revoke an API Key ```ts collapsibleLines="1-9" expandButtonLabel="Show Imports" import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/medusa" import { IApiKeyModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/utils" export async function POST( request: AuthenticatedMedusaRequest, res: MedusaResponse ) { const apiKeyModuleService: IApiKeyModuleService = request.scope.resolve( ModuleRegistrationName.API_KEY ) const revokedKey = await apiKeyModuleService.revoke(request.params.id, { revoked_by: request.auth_context.actor_id, }) res.json({ api_key: revokedKey, }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeApiKeyModule } from "@medusajs/api-key" type ContextType = { params: { id: string user_id: string } } export async function POST(request: Request, { params }: ContextType) { const apiKeyModuleService = await initializeApiKeyModule() const revokedKey = await apiKeyModuleService.revoke(params.id, { revoked_by: params.user_id, }) return NextResponse.json({ api_key: revokedKey, }) } ``` --- ## Verify or Authenticate Token ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/medusa" import { IApiKeyModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/utils" export async function POST(request: MedusaRequest, res: MedusaResponse) { const apiKeyModuleService: IApiKeyModuleService = request.scope.resolve( ModuleRegistrationName.API_KEY ) const authenticatedToken = await apiKeyModuleService.authenticate( request.params.token ) res.json({ is_authenticated: !!authenticatedToken, }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeApiKeyModule } from "@medusajs/api-key" type ContextType = { params: { token: string } } export async function POST(request: Request, { params }: ContextType) { const apiKeyModuleService = await initializeApiKeyModule() const authenticatedToken = await apiKeyModuleService.authenticate( request.params.token ) return NextResponse.json({ is_authenticated: !!authenticatedToken, }) } ``` --- ## Roll API Key ```ts collapsibleLines="1-8" expandButtonLabel="Show Imports" import { AuthenticatedMedusaRequest, MedusaResponse, } from "@medusajs/medusa" import { IApiKeyModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/utils" export async function POST( request: AuthenticatedMedusaRequest, res: MedusaResponse ) { const apiKeyModuleService: IApiKeyModuleService = request.scope.resolve( ModuleRegistrationName.API_KEY ) const revokedKey = await apiKeyModuleService.revoke(request.params.id, { revoked_by: request.auth_context.actor_id, }) const newKey = await apiKeyModuleService.createApiKeys({ title: revokedKey.title, type: revokedKey.type, created_by: revokedKey.created_by, }) res.json({ api_key: newKey, }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeApiKeyModule } from "@medusajs/api-key" type ContextType = { params: { id: string user_id: string } } export async function POST(request: Request, { params }: ContextType) { const apiKeyModuleService = await initializeApiKeyModule() const revokedKey = await apiKeyModuleService.revoke(params.id, { revoked_by: params.user_id, }) const newKey = await apiKeyModuleService.createApiKeys({ title: revokedKey.title, type: revokedKey.type, created_by: revokedKey.created_by, }) return NextResponse.json({ api_key: newKey, }) } ``` --- ## More Examples The [API Key Module's main service reference](/references/api-key) provides a reference to all the methods available for use with examples for each.