> For the complete documentation index, see [llms.txt](/llms.txt).
> A full single-fetch corpus is available at [llms-full.txt](/llms-full.txt).
---
title: "Resume a workflow"
description: "Answer a workflow that paused for human input, so it continues from the pause."
method: "POST"
endpoint: "/v1/workflows/resume/:runId"
order: 15
group: "Gateway: human input"
last_verified: 2026-10-08
---



`POST /v1/workflows/resume/:runId`

Answer a workflow that paused for human input, so it continues from the pause.


  ## Parameters

  - `X-API-KEY` _header_ **required** — A service key with the `workflow` scope.
  - `X-DEPLOYMENT-ID` _header_ **required** — The deployment running the workflow.
  - `runId` _string_ **required** — The run ID.
  - `user_response` _string | null_ **required** — The answer: the text, the chosen option `id`, or for `multiselect` the JSON-array string of the chosen ids. Send `null` or `__skipped__` to skip a skippable question. Arrays, objects, numbers, and booleans return `400`.



> Create a key with the `workflow` scope: `agnt5 service-keys create --name "approver" --project <project-id> --scopes run,workflow`. See [Human-in-the-loop](/docs/build/human-in-the-loop.md) for how a workflow asks for input.



  ## Request example


```bash
curl -X POST "https://gw.agnt5.com/v1/workflows/resume/{run_id}" \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: {service_key}" \
  -H "X-DEPLOYMENT-ID: {deployment_id}" \
  -d '{"user_response": "approve"}'
```

```javascript
fetch('https://gw.agnt5.com/v1/workflows/resume/' + runId, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'X-API-KEY': serviceKey, 'X-DEPLOYMENT-ID': deploymentId },
  body: JSON.stringify({ user_response: 'approve' })
})
```


  ```json {{ title: 'Response' }}
  {
    "run_id": "7f6e5d4c-...",
    "status": "resumed"
  }
  ```



