***

title: live_transcribe
slug: /reference/python/relay/call/live-transcribe
description: Start or stop live transcription on a call.
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[transcribe]: /docs/server-sdks/reference/python/relay/call/transcribe

[live-translate]: /docs/server-sdks/reference/python/relay/call/live-translate

Start or stop live transcription on the call. Unlike
[`transcribe()`][transcribe] which
provides a post-call result, live transcription delivers text in real-time.

<Info>
  See also [`live_translate()`][live-translate] for real-time translation.
</Info>

## **Parameters**

<ParamField path="action" type="dict" required={true} toc={true}>
  Action configuration for the live transcription.
</ParamField>

<Indent>
  <ParamField path="action.action" type="str" required={true} toc={true}>
    The action to perform.

    * `"start"` -- begin live transcription
    * `"stop"` -- end live transcription
  </ParamField>

  <ParamField path="action.language" type="str" toc={true}>
    Transcription language code (e.g., `"en-US"`).
  </ParamField>

  <ParamField path="action.status_url" type="str" toc={true}>
    URL to receive transcription results via webhook.
  </ParamField>
</Indent>

## **Returns**

`dict` -- Server response confirming the operation.

## **Example**

```python {15}
from signalwire.relay import RelayClient

client = RelayClient(
    project="your-project-id",
    token="your-api-token",
    host="your-space.signalwire.com",
    contexts=["default"],
)

@client.on_call
async def handle_call(call):
    await call.answer()

    # Start live transcription
    result = await call.live_transcribe({
        "action": "start",
        "language": "en-US",
        "status_url": "https://example.com/transcription-results",
    })
    print(f"Live transcription started: {result}")

    # Let the call proceed...
    await call.wait_for_ended()

client.run()
```