workflow
Version:
Workflow DevKit - Build durable, resilient, and observable workflows
163 lines (122 loc) • 3.98 kB
text/mdx
---
title: resumeHook
description: Resume a paused workflow by sending a payload to a hook token.
type: reference
summary: Use resumeHook to send a payload to a hook token and resume a paused workflow.
prerequisites:
- /docs/foundations/hooks
related:
- /docs/api-reference/workflow-api/resume-webhook
---
Resumes a workflow run by sending a payload to a hook identified by its token.
It creates a `hook_received` event and re-triggers the workflow to continue execution.
<Callout type="warn">
`resumeHook` is a runtime function that must be called from outside a workflow function.
</Callout>
```typescript lineNumbers
import { resumeHook } from "workflow/api";
export async function POST(request: Request) {
const { token, data } = await request.json();
try {
const result = await resumeHook(token, data); // [!code highlight]
return Response.json({
runId: result.runId
});
} catch (error) {
return new Response("Hook not found", { status: 404 });
}
}
```
## API Signature
### Parameters
<TSDoc
definition={`
import { resumeHook } from "workflow/api";
export default resumeHook;`}
showSections={["parameters"]}
/>
### Returns
Returns a `Promise<Hook>` that resolves to:
<TSDoc
definition={`
import type { Hook } from "@workflow/world";
export default Hook;`}
showSections={["returns"]}
/>
## Examples
### Basic API Route
Using `resumeHook` in a basic API route to resume a hook:
```typescript lineNumbers
import { resumeHook } from "workflow/api";
export async function POST(request: Request) {
const { token, data } = await request.json();
try {
const result = await resumeHook(token, data); // [!code highlight]
return Response.json({
success: true,
runId: result.runId
});
} catch (error) {
return new Response("Hook not found", { status: 404 });
}
}
```
### With Type Safety
Defining a payload type and using `resumeHook` to resume a hook with type safety:
```typescript lineNumbers
import { resumeHook } from "workflow/api";
type ApprovalPayload = {
approved: boolean;
comment: string;
};
export async function POST(request: Request) {
const { token, approved, comment } = await request.json();
try {
const result = await resumeHook<ApprovalPayload>(token, { // [!code highlight]
approved, // [!code highlight]
comment, // [!code highlight]
}); // [!code highlight]
return Response.json({ runId: result.runId });
} catch (error) {
return Response.json({ error: "Invalid token" }, { status: 404 });
}
}
```
### Server Action (Next.js)
Using `resumeHook` in Next.js server actions to resume a hook:
```typescript lineNumbers
"use server";
import { resumeHook } from "workflow/api";
export async function approveRequest(token: string, approved: boolean) {
try {
const result = await resumeHook(token, { approved });
return result.runId;
} catch (error) {
throw new Error("Invalid approval token");
}
}
```
### Webhook Handler
Using `resumeHook` in a generic webhook handler to resume a hook:
```typescript lineNumbers
import { resumeHook } from "workflow/api";
// Generic webhook handler that forwards data to a hook
export async function POST(request: Request) {
const url = new URL(request.url);
const token = url.searchParams.get("token");
if (!token) {
return Response.json({ error: "Missing token" }, { status: 400 });
}
try {
const body = await request.json();
const result = await resumeHook(token, body);
return Response.json({ success: true, runId: result.runId });
} catch (error) {
return Response.json({ error: "Hook not found" }, { status: 404 });
}
}
```
## Related Functions
- [`getHookByToken()`](/docs/api-reference/workflow-api/get-hook-by-token) - Get hook details before resuming.
- [`createHook()`](/docs/api-reference/workflow/create-hook) - Create a hook in a workflow.
- [`defineHook()`](/docs/api-reference/workflow/define-hook) - Type-safe hook helper.