> 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() ``` > Wait until the call is ending.