Vercel’s Chat SDK now ships a requestApproval subpath under chat/workflow that posts an interactive card with Approve and Deny buttons, then suspends the workflow until someone clicks one.
What you get in a single call:
- Durable suspension — the wait lasts seconds or days and survives deploys and restarts
- No infra to build — no approvals table, no
onActionhandler, no polling loop - Scoped approvers — pass
approversto restrict who can decide - Thread serialization —
Threadinstances cross the workflow boundary automatically, so context survives the pause
Under the hood, Workflow SDK’s createWebhook generates a URL that the card buttons POST to on click. The workflow resumes with the click payload and continues. Three primitives power the wait:
| Primitive | Waits for | Typical use |
|---|---|---|
createWebhook | HTTP call from external system | Slack button, vendor callback |
createHook | Typed in-app event | In-app approval decision |
sleep | Fixed duration (no upper limit) | Timeout fallback |
NOTE
This requires both Chat SDK and Workflow SDK. The approval card renders in Slack — no in-app UI component is shipped yet.
Available now — start with the approvals docs and the changelog post.