---
title: "Continue a signed Twilio inbound call flow"
description: "Requires a valid Twilio signature and workspace/CallSid-bound run. Menu and Dial callbacks retain existing behavior. A Voice AI step returns the existing authenticated connect TwiML for the selected agent, skipping team hours while retaining inbound enablement, key and concurrency gates. Unavailable agents or lookup failures follow the wired unavailable exit and log agent_fallback."
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.channelautomations.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Channel Automation API › Voice AI

`POST /api/workspaces/{workspaceId}/inbound-call-flow/{runId}/step`

Requires a valid Twilio signature and workspace/CallSid-bound run. Menu and Dial callbacks retain existing behavior. A Voice AI step returns the existing authenticated connect TwiML for the selected agent, skipping team hours while retaining inbound enablement, key and concurrency gates. Unavailable agents or lookup failures follow the wired unavailable exit and log agent_fallback.

## Path parameters

- `workspaceId` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.path.workspaceId`; string, required)
- `runId` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.path.runId`; string, required)
  - format `uuid`

## Query parameters

- `node` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.query.node`; string, required)
- `attempt` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.query.attempt`; integer, optional)

## Request body

_Required._

- `CallSid` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.CallSid`; string, required)
- `From` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.From`; string, optional)
- `To` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.To`; string, optional)
- `Digits` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.Digits`; string, optional)
- `SpeechResult` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.SpeechResult`; string, optional)
- `DialCallStatus` (`post/api/workspaces/workspaceId/inbound-call-flow/runId/step.DialCallStatus`; string, optional)

## Example request

```text
{
  "CallSid": "string",
  "From": "string",
  "To": "string",
  "Digits": "string",
  "SpeechResult": "string",
  "DialCallStatus": "string"
}
```

## Code samples

### cURL

```bash
curl --request POST \
  --url 'https://api.channelautomation.com/api/workspaces/<workspaceId>/inbound-call-flow/<runId>/step?node=string' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode CallSid=string \
  --data-urlencode From=string \
  --data-urlencode To=string \
  --data-urlencode Digits=string \
  --data-urlencode SpeechResult=string \
  --data-urlencode DialCallStatus=string
```

### TypeScript

```typescript
const encodedParams = new URLSearchParams();
encodedParams.append('CallSid', 'string');
encodedParams.append('From', 'string');
encodedParams.append('To', 'string');
encodedParams.append('Digits', 'string');
encodedParams.append('SpeechResult', 'string');
encodedParams.append('DialCallStatus', 'string');

const url = 'https://api.channelautomation.com/api/workspaces/<workspaceId>/inbound-call-flow/<runId>/step?node=string';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/x-www-form-urlencoded'},
  body: encodedParams
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.channelautomation.com/api/workspaces/<workspaceId>/inbound-call-flow/<runId>/step?node=string"

payload = {
    "CallSid": "string",
    "From": "string",
    "To": "string",
    "Digits": "string",
    "SpeechResult": "string",
    "DialCallStatus": "string"
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}

response = requests.post(url, data=payload, headers=headers)

print(response.text)
```

## Responses

### 200

TwiML for the next step or existing flow-error bypass

### 403

Invalid Twilio signature


Source: https://developer.channelautomations.com/api/post-api-workspaces-workspace-id-inbound-call-flow-run-id-step/index.md
