***

title: join_conference
slug: /reference/python/relay/call/join-conference
description: Join an ad-hoc audio conference.
max-toc-depth: 3
---------------------

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

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

[calling-conference]: /docs/server-sdks/reference/python/relay/call#events

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

Join an ad-hoc audio conference. The conference is created automatically if it
does not already exist. Multiple calls can join the same conference by name.

<Info>
  Use [`leave_conference()`][leave-conference] to remove the call from the conference.
</Info>

<Info>
  This method emits [`calling.conference`][calling-conference] events. See [Call Events][call-events] for payload details.
</Info>

## **Parameters**

<ParamField path="name" type="str" required={true} toc={true}>
  Conference name. All calls joining the same name are in the same conference.
</ParamField>

<ParamField path="muted" type="Optional[bool]" toc={true}>
  Join the conference muted.
</ParamField>

<ParamField path="beep" type="Optional[str]" toc={true}>
  Play a beep when joining or leaving.

  * `"true"` -- beep on both enter and exit
  * `"false"` -- no beep
  * `"onEnter"` -- beep only when a participant joins
  * `"onExit"` -- beep only when a participant leaves
</ParamField>

<ParamField path="start_on_enter" type="Optional[bool]" toc={true}>
  Start the conference when this participant enters. If `False`, the
  conference waits until a participant with `start_on_enter=True` joins.
</ParamField>

<ParamField path="end_on_exit" type="Optional[bool]" toc={true}>
  End the conference when this participant leaves.
</ParamField>

<ParamField path="wait_url" type="Optional[str]" toc={true}>
  URL of audio to play while waiting for the conference to start.
</ParamField>

<ParamField path="max_participants" type="Optional[int]" toc={true}>
  Maximum number of participants in the conference.
</ParamField>

<ParamField path="record" type="Optional[str]" toc={true}>
  Recording mode.

  * `"record-from-start"` -- begin recording when the conference starts
  * `"do-not-record"` -- do not record the conference
</ParamField>

<ParamField path="region" type="Optional[str]" toc={true}>
  Region for the conference media server.
</ParamField>

<ParamField path="trim" type="Optional[str]" toc={true}>
  Whether to trim silence from the conference recording.
</ParamField>

<ParamField path="coach" type="Optional[str]" toc={true}>
  Call ID of a participant who can hear but not be heard (coaching mode).
</ParamField>

<ParamField path="status_callback" type="Optional[str]" toc={true}>
  URL to receive conference status webhooks.
</ParamField>

<ParamField path="status_callback_event" type="Optional[str]" toc={true}>
  Events that trigger status callbacks.
</ParamField>

<ParamField path="status_callback_event_type" type="Optional[str]" toc={true}>
  Content type for status callback requests.
</ParamField>

<ParamField path="status_callback_method" type="Optional[str]" toc={true}>
  HTTP method for status callbacks (e.g., `"POST"`, `"GET"`).
</ParamField>

<ParamField path="recording_status_callback" type="Optional[str]" toc={true}>
  URL to receive recording status webhooks.
</ParamField>

<ParamField path="recording_status_callback_event" type="Optional[str]" toc={true}>
  Events that trigger recording status callbacks.
</ParamField>

<ParamField path="recording_status_callback_event_type" type="Optional[str]" toc={true}>
  Content type for recording status callback requests.
</ParamField>

<ParamField path="recording_status_callback_method" type="Optional[str]" toc={true}>
  HTTP method for recording status callbacks.
</ParamField>

<ParamField path="stream_obj" type="Optional[dict]" toc={true}>
  Stream configuration for the conference audio.
</ParamField>

## **Returns**

`dict` -- Server response confirming the join.

## **Example**

```python {16}
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()
    await call.play([{"type": "tts", "text": "Joining the team conference."}])

    # Join a conference
    await call.join_conference(
        "team-standup",
        beep="onEnter",
        start_on_enter=True,
    )

    # The call is now in the conference until it leaves or the call ends

client.run()
```