Chat SDK Adds Durable Approvals: Agent Workflows That Wait For a Human

TL;DR
Vercel Chat SDK durable approvals pause a Workflow SDK run until a human clicks Approve in chat, with one requestApproval call and a wait that survives deploys.
Last updated: August 6, 2026
On August 6, Vercel announced that its Chat SDK can now pause a workflow until a human approves it. A single requestApproval call from the new chat/workflow subpath posts an Approve/Deny card into a chat thread and suspends a Workflow SDK run until someone decides. The wait can be seconds or days, and it survives deploys and restarts. No approvals table, no onAction handler, no polling loop.
The changelog example is a deploy gate:
import { requestApproval } from "chat/workflow";
import type { Thread } from "chat";
export async function deployApproval(opts: { thread: Thread; version: string }) {
"use workflow";
const { approved, user, timedOut } = await requestApproval(opts.thread, {
title: `Deploy Website?`,
fields: { Version: opts.version },
timeout: "24h",
});
if (approved) {
await deploy(opts.version);
}
}
What shipped#
The approval surface is a small API with sharp edges, documented in the approvals guide:
- Durable wait, not a message.
requestApprovalsuspends the workflow until a click or a timeout.Threadinstances serialize across the workflow boundary, and you register yourChatinstance as a singleton so the run revives cleanly after a restart. - A real result object. The call resolves to
{ approved, timedOut, user }, whereuseris the person who decided. A timeout is a first-class outcome, not an error you recover from by squinting at logs. - Verified decisions. Chat SDK checks the platform's signature on every click, and the button's callback URL never reaches the client. The
user.idon the result is genuinely the person who clicked - important for anything that ends up in an audit trail. - Scoped approvers. Pass
approverswith user IDs and clicks from anyone else post a notice while the workflow keeps waiting. The docs say it plainly: setapproversfor anything consequential. - Stale-proof cards. When a decision lands or the timeout elapses, the card is edited in place - buttons are replaced with an outcome line, so an old thread cannot be clicked a second time to authorize a second deploy.
- Custom cards for webhooks.
buildApprovalCardandbuildResolvedCardare exported for flows where the buttons should target a webhook you manage yourself.
Options are minimal on purpose: title (required), subtitle, description, fields, approveLabel/denyLabel, timeout in ms/s/m/h/d, and approvers. Omit the timeout and the workflow waits indefinitely.
Why it matters#
Durable approvals are the missing primitive in agent deployments. For the past year, teams building agents that do irreversible things - deploys, releases, refunds, credential rotation - have hand-rolled the same three pieces: a place to store pending approvals, an event handler that resumes the run, and a poller that checks whether anything happened. That stack is where agents silently die: the process restarts, the in-memory state is gone, and the "human check" never happens.
This design moves the human into the workflow graph instead of bolting them on next to it. The suspend is a language feature of the Workflow SDK - the same durability model as our AI SDK 7 writeup covered in June, where approval support landed in the SDK proper. What is new here is the chat surface: the approval lives where the operator already is, and the platform signature guarantees who clicked. For Slack or Discord-based ops, that collapses a whole custom approvals service into one function call.
The approvers option is the quietly important part. Most approval UIs let everyone vote; this one lets you enumerate exactly who can decide, which is the difference between a rubber stamp and a control. Combined with verified clicks and the in-place outcome line, you get a decision record you could actually defend later - no custom logging required.
Where it fits#
This is Vercel's agent platform assembling itself in public. The v0 API makes app-building agents callable by software; AI Gateway budgets cap what those agents spend; MCP tooling shapes how those agents reach tools. Durable approvals are the gate between the agent and the action - the moment a human explicitly says "yes" instead of the agent guessing.
It also speaks to the approval-fatigue problem we covered in Approval Fatigue Is an Agent Security Bug: the failure mode of bad approval UIs is that they fire constantly and train people to click through. A durable gate is only as good as its placement. If every step of a five-step workflow requires a chat click, this reintroduces fatigue with extra steps. The right shape is what that post argued for - risk-aware autonomy with approvals reserved for irreversible actions - and requestApproval slots into that exactly: a scoped, signed, time-boxed decision on a narrow action.
One honest caveat: this is chat-platform-shaped. The card, the signature check, and the click handling all belong to the platform integration, so the durability guarantees are strongest where Chat SDK integrations exist. And registerSingleton plus the Workflow SDK peer dependency means this is a deliberate architecture choice, not a drop-in snippet. But for teams already on that stack, it is the approval layer that was previously three systems, now one call.
FAQ#
What does requestApproval do in Vercel's Chat SDK?#
requestApproval, imported from the chat/workflow subpath, posts an Approve/Deny card into a chat thread and suspends a Workflow SDK run until someone decides or the timeout elapses. The wait can be seconds or days and survives deploys and restarts.
What does requestApproval return?#
It resolves to { approved, timedOut, user }, where user is the person who decided. Chat SDK checks the platform's signature on every click, so user.id is genuinely the person who clicked, and a timeout is a first-class outcome rather than an error.
How do I limit who can approve a Chat SDK workflow?#
Pass approvers with a list of user IDs. Clicks from anyone else post a notice while the workflow keeps waiting, and the docs recommend setting approvers for anything consequential.
What happens if I omit the timeout?#
The workflow waits indefinitely. When a timeout is set, it accepts ms, s, m, h, or d units, and the card is edited in place with an outcome line once a decision lands or the timeout elapses.
Continue Reading#
- Vercel AI SDK 7: The Production Agent Upgrade - the SDK-level agent runtime, WorkflowAgent, and earlier approval support
- The v0 API Is GA - Vercel's app-building agent as a headless service, called from agent loops
- AI Gateway Spend Budgets and Alerts - the other half of agent governance: capping what agents can spend
- Approval Fatigue Is an Agent Security Bug - why approval UX determines whether gates actually protect you
- AI Agent Containment Needs a Capability Ledger - the wider trust-boundary debate around agent actions
- Vercel Skill Packs: The Distribution Layer for Agent Skills Just Landed - how Vercel packages and distributes the skills these approval-gated agents run
Sources#
- Pause workflows for approval with Chat SDK - Vercel Changelog - the August 6 announcement
- Approvals - Chat SDK documentation - API reference, options, result shape, and setup
- Workflow SDK - the durable execution runtime that suspension builds on
Get the next deep dive like this in your inbox
One email a week on News and the rest of the AI dev stack. Free.
Read next on AI coding tools
Vercel AI SDK 7: The Production Agent Upgrade
Vercel AI SDK 7 for production agents: typed tool context, WorkflowAgent durability, approvals, telemetry, realtime and the AI SDK 6 migration path.
9 min readThe v0 API Is GA: Vercel Just Made Its App-Building Agent a Headless Service
The v0 API is GA: send a prompt to Vercel's app-building agent, get a running app with an embeddable preview URL, then deploy it to Vercel in one more call.
6 min readVercel MCP Ships the 2026-07-28 Spec: The MCP Migration Clock Starts
Vercel MCP now serves the stateless 2026-07-28 spec and the 2025 protocol from one endpoint via mcp-handler 2.x. What it means for server authors and clients.
7 min readNew here? Start with
Technical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.







