> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# wait_for_ending

> Wait until the call is ending.

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

[relayevent]: /docs/server-sdks/reference/python/relay/events

Wait until the call state reaches `ending`. Returns immediately if the call
is already ending or has moved past it (ended). A typed convenience over
[`wait_for()`][wait-for] on the `calling.call.state` event.

## Parameters

**`timeout`** `float | None` — default: None

Maximum seconds to wait. Raises `asyncio.TimeoutError` if exceeded. `None`
waits indefinitely.

---

## Returns

[`RelayEvent`][relayevent] -- The state event. When the call was already at or past the target, `event.params["call_state"]` holds the current state.

## Example

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

client = RelayClient(
    project="your-project-id",
    token="your-api-token",
    contexts=["default"],
)

@client.on_call
async def handle_call(call):
    await call.answer()
    await (await call.play_tts("Goodbye.")).wait()
    await call.hangup()
    await call.wait_for_ending(timeout=10)

client.run()
```