---
title: "Judge the newest ~30 s of an in-progress visit against the sales process"
description: "Transcribes one short audio chunk and returns which process steps are covered, the step the conversation is on, and at most one nudge (an earlier step still open while a later one is under way). The phone holds the state and sends it back each time; the server stores no audio or transcript. It does keep the step progress per visit (which steps are covered, when in the recording, the current step) so managers can follow the visit in \"In the field\"; the conversation context is never stored. No feature flag; requires an active assignment of the visit to the caller, a scorecard with steps, and the workspace's own AI key."
---

> 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 › Conversations

`POST /api/field-sales/rep/live-steps`

Transcribes one short audio chunk and returns which process steps are covered, the step the conversation is on, and at most one nudge (an earlier step still open while a later one is under way). The phone holds the state and sends it back each time; the server stores no audio or transcript. It does keep the step progress per visit (which steps are covered, when in the recording, the current step) so managers can follow the visit in "In the field"; the conversation context is never stored. No feature flag; requires an active assignment of the visit to the caller, a scorecard with steps, and the workspace's own AI key.

## Authentication

- `BearerAuth`, http, header `Authorization`, format `JWT`

## Request body

_Required._

- `appointment_id` (`post/api/field-sales/rep/live-steps.appointment_id`; string, required)
  - format `uuid`
- `elapsed_seconds` (`post/api/field-sales/rep/live-steps.elapsed_seconds`; number, required) — Recording time at the end of this chunk
- `audio_base64` (`post/api/field-sales/rep/live-steps.audio_base64`; string, required) — At most 1.5 MiB of audio
- `mime_type` (`post/api/field-sales/rep/live-steps.mime_type`; string, optional)
  - one of `"audio/mp4"`, `"audio/x-m4a"`, `"audio/webm"`, `"audio/wav"`; default `"audio/mp4"`
- `state` (`post/api/field-sales/rep/live-steps.state`; object, optional) — The state returned by the previous call

## Example request

```json
{
  "appointment_id": "21634f0d-2156-4d4b-a142-2e7c783a9212",
  "elapsed_seconds": 0,
  "mime_type": "audio/mp4",
  "audio_base64": "string",
  "state": {}
}
```

## Code samples

### cURL

```bash
curl --request POST \
  --url https://api.channelautomation.com/api/field-sales/rep/live-steps \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "appointment_id": "21634f0d-2156-4d4b-a142-2e7c783a9212",
  "elapsed_seconds": 0,
  "mime_type": "audio/mp4",
  "audio_base64": "string",
  "state": {}
}
'
```

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/field-sales/rep/live-steps';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json', Authorization: 'Bearer <token>'},
  body: JSON.stringify({
    appointment_id: '21634f0d-2156-4d4b-a142-2e7c783a9212',
    elapsed_seconds: 0,
    mime_type: 'audio/mp4',
    audio_base64: 'string',
    state: {}
  })
};

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/field-sales/rep/live-steps"

payload = {
    "appointment_id": "21634f0d-2156-4d4b-a142-2e7c783a9212",
    "elapsed_seconds": 0,
    "mime_type": "audio/mp4",
    "audio_base64": "string",
    "state": {}
}
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <token>"
}

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

print(response.text)
```

## Responses

### 200

live: steps with status, current_step_key and nudge; state: send back with the next chunk

### 400

Invalid request or oversized chunk

### 404

The visit is not assigned to the caller

### 409

No sales-process steps in the scorecard

### 429

Too many chunks in a minute

### 502

The AI provider failed; recording is unaffected


Source: https://developer.channelautomations.com/api/post-api-field-sales-rep-live-steps/index.md
