Resume Execution

Submit a decision for a paused Human in the Loop block and continue the run. Requires write access to the workflow. The body is the resume input, either wrapped in input or sent as top-level fields. The decision is approved unless the input sets _humanInTheLoopDecision (or decision) to denied or rejected. Each resume chooses its own response mode: synchronous by default, Server-Sent Events with Accept: text/event-stream or X-Stream-Response: true, or asynchronous with X-Execution-Mode: async (async wins when both are sent).

POST/api/resume/{workflowId}/{executionId}/{contextId}
X-API-Key<token>

Your SteelEngine API key (personal, workspace, or organization). Create personal and workspace keys under Settings > API Keys. Create organization keys under Organization Settings > API Keys.

In: header

Path Parameters

workflowId*string

The unique identifier of the workflow.

executionId*string

The execution that paused.

contextId*string

The pause point to resume, from the pause point or its resumeLinks.

Header Parameters

X-Execution-Mode?"async"

Set to async to return 202 immediately with a statusUrl to poll.

Value in

  • "async"
X-Stream-Response?"true"

Set to true to stream post-resume events as Server-Sent Events.

Value in

  • "true"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/resume/string/string/string" \  -H "Content-Type: application/json" \  -d '{    "input": {      "approved": true,      "comments": "Looks good to proceed"    }  }'
{  "success": true,  "status": "success",  "executionId": "exec_resume_123",  "rootExecutionId": "exec_9f8e7d6c5b",  "output": {    "result": "approved"  },  "metadata": {    "duration": 1234,    "startTime": "2026-01-01T00:00:00.000Z",    "endTime": "2026-01-01T00:00:01.234Z"  }}