--- products: - api key --- import { CodeTabs, CodeTab } from "docs-ui" export const metadata = { title: `Publishable API Keys with Sales Channels`, } # {metadata.title} In this document, you’ll learn what publishable API keys are and how to use them with sales channels. ## Publishable API Keys with Sales Channels A publishable API key, provided by the API Key Module, is a client key scoped to one or more sales channels. When sending a request to a Store API route, you must pass a publishable API key in the header of the request: ```bash curl http://localhost:9000/store/products \ x-publishable-api-key: {your_publishable_api_key} ``` The Medusa application infers the associated sales channels and ensures that only data relevant to the sales channel are used. --- ## How to Create a Publishable API Key? To create a publishable API key, either use the [Medusa Admin](!user-guide!/settings/developer/publishable-api-keys) or the [Admin API Routes](!api!/admin#publishable-api-keys). --- ## Access Sales Channels in Custom Store API Routes If you create an API route under the `/store` prefix, you can access the sales channels associated with the request's publishable API key using the `publishable_key_context` property of the request object. For example: ```ts import { MedusaStoreRequest, MedusaResponse } from "@medusajs/framework/http" import { getVariantAvailability } from "@medusajs/framework/utils" export async function GET( req: MedusaStoreRequest, res: MedusaResponse ) { const query = req.scope.resolve("query") const sales_channel_ids = req.publishable_key_context.sales_channel_ids res.json({ sales_channel_id: sales_channel_ids[0], }) } ``` In this example, you retrieve the scope's sales channel IDs using `req.publishable_key_context.sales_channel_ids`, whose value is an array of IDs. You can then use these IDs based on your business logic. For example, you can retrieve the sales channels' details using [Query](!docs!/learn/fundamentals/module-links/query). Notice that the request object's type is `MedusaStoreRequest` instead of `MedusaRequest` to ensure the availability of the `publishable_key_context` property.