# Stream a call's live transcript

`GET https://api.morevoice.ai/v1/calls/{id}/transcript/stream`

Server-Sent Events with what is said on a call as it is said: `transcript.partial` while a line is spoken (its text so far) and `transcript.final` when it is complete. A final supersedes the partials with the same `utterance_id`. `speaker` is `customer` (the caller), `assistant` (the AI), `agent` (a human agent), `supervisor` or `external` (a transfer party); AI and human calls alike. `start_ms` and `end_ms` are when the line began and became final, in milliseconds from the call's start, as observed live (null for lines spoken before the stream connected; the call's transcript has the exact times after the call). The stream starts with the conversation so far and ends with `call.ended`. Reconnect with `Last-Event-ID` to get only what you missed. Send `partials=false` for complete lines only. Counts against the key's stream limit (`concurrency_limit`, `limit_type: api_streams`).

Authenticate with a secret API key: `Authorization: Bearer $MOREVOICE_API_KEY`.

Operation ID: `calls_transcript_stream`.

## Parameters

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | A call ID (`call_…`). |

### Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `partials` | `"true" \| "false"` | no | `false`: only complete lines (`transcript.final`), no partials. Default `true`. |
| `last_event_id` | `string` | no | Resume after this event, for clients that cannot send the `Last-Event-ID` header (the header wins when both are sent). |

### Headers

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `MoreVoice-Version` | `string` | no | The API version to use for this request. Defaults to the version the API key is pinned to. |

## Responses

### 200 OK

The transcript stream.

### 400 Bad Request

The request is invalid: a parameter is missing, malformed or unknown, or the version header is unknown. Returns `ErrorEnvelope`.

### 401 Unauthorized

No valid API key was sent. Returns `ErrorEnvelope`.

### 403 Forbidden

The key may not do this (a missing scope, a plan limit, or a compliance block). Returns `ErrorEnvelope`.

### 404 Not Found

No object with this ID exists in this organisation and mode. Returns `ErrorEnvelope`.

### 429 Too Many Requests

Too many requests, or no call capacity right now. Retry after the Retry-After delay. Returns `ErrorEnvelope`.

### 500 Internal Server Error

Something went wrong on MoreVoice's side. Retry with the same Idempotency-Key. Returns `ErrorEnvelope`.

## Code samples

**TypeScript**

```ts
import MoreVoice from "@morevoice/sdk";

const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment

for await (const event of mv.calls.transcriptStream("call_7Hk2Lm9Qp")) {
	console.log(event.type, event.data.object);
}
```

**Python**

```python
import os

import httpx

url = "https://api.morevoice.ai/v1/calls/call_7Hk2Lm9Qp/transcript/stream"
headers = {"Authorization": f"Bearer {os.environ['MOREVOICE_API_KEY']}", "Accept": "text/event-stream"}
with httpx.stream("GET", url, headers=headers, timeout=None) as response:
    response.raise_for_status()
    for line in response.iter_lines():
        if line.startswith("data:"):
            print(line[5:].strip())
```

**cURL**

```sh
curl https://api.morevoice.ai/v1/calls/call_7Hk2Lm9Qp/transcript/stream \
  -H "Authorization: Bearer $MOREVOICE_API_KEY" \
  -H "Accept: text/event-stream" -N
```
