1 min read

Chat SDK now ships the Slack adapter's primitives as standalone imports for apps that already handle their own routing, state, or workflow execution.
Use only what you need:
Request verification and payload parsing (
@chat-adapter/slack/webhook)Markdown formatting (
@chat-adapter/slack/format)Fetch-based Web API calls (
@chat-adapter/slack/api)Block Kit conversion (
@chat-adapter/slack/blocks)
Each subpath skips the full Chat runtime, so your imports stay clean.
import { readSlackWebhook } from "@chat-adapter/slack/webhook";import { postSlackMessage } from "@chat-adapter/slack/api";
export async function POST(request: Request) { const payload = await readSlackWebhook(request, { signingSecret: process.env.SLACK_SIGNING_SECRET!, });
if (payload.kind === "app_mention") { await postSlackMessage({ channel: payload.continuation.channelId, markdownText: `received: ${payload.text}`, token: process.env.SLACK_BOT_TOKEN!, }); }
return new Response(null, { status: 200 });}Verifying a webhook and posting a reply with the low-level subpaths.
To get started, read the Slack primitives documentation.
The Complete Guide to Chat SDK
Learn how Chat SDK works end-to-end: from core concepts to building your first bot to deploying it across Slack, Teams, and more.
Read the guide