Framework how-tos
How to add human approvals to LangGraph
A tactical walkthrough for pausing LangGraph, routing approval through Contro1, and resuming execution safely.
LangGraph works best with approval nodes at deterministic checkpoints and webhook-based resume handling.
Key takeaways
- Place approval nodes at deterministic checkpoints, not wherever the LLM decides.
- Use LangGraph's interrupt pattern so state is persisted while the human decides.
- Resume through a verified webhook, never through a raw HTTP endpoint.
- Store the request id in your graph state for idempotent resume.
Pattern
- Pick the checkpoint in your graph where a human decision belongs.
- Create the approval request from that node with full business context.
- Store the request id and correlation metadata in graph state.
- Resume only after verifying the signed callback.
Frequently asked questions
Should approval happen inside the graph or outside it?
The approval request should be triggered by the graph node, but the final resume should happen through a verified callback path - not an open HTTP endpoint.
What if the approval times out?
Set a deadline on the request. On timeout, the graph receives a rejection or escalation event and takes the fallback path you defined.
Can a single run create multiple approvals?
Yes. Each risky tool call can gate independently. Give each one a distinct idempotency key and correlation id.