***

title: joinConference
slug: /reference/typescript/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/typescript/relay/call/leave-conference

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

[call-events]: /docs/server-sdks/reference/typescript/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 [`leaveConference()`][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="string" required={true} toc={true}>
  Conference name. All calls joining the same name are in the same conference.
</ParamField>

<ParamField path="muted" type="boolean | undefined" toc={true}>
  Join the conference muted.
</ParamField>

<ParamField path="beep" type="string | undefined" 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="startOnEnter" type="boolean | undefined" toc={true}>
  Start the conference when this participant enters. If `false`, the conference
  waits until a participant with `startOnEnter: true` joins.
</ParamField>

<ParamField path="endOnExit" type="boolean | undefined" toc={true}>
  End the conference when this participant leaves.
</ParamField>

<ParamField path="maxParticipants" type="number | undefined" toc={true}>
  Maximum number of participants in the conference.
</ParamField>

<ParamField path="record" type="string | undefined" toc={true}>
  Recording mode:

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

<ParamField path="waitUrl" type="string | undefined" toc={true}>
  URL of audio to play while waiting for the conference to start.
</ParamField>

<ParamField path="region" type="string | undefined" toc={true}>
  Region for the conference media server.
</ParamField>

<ParamField path="trim" type="string | undefined" toc={true}>
  Whether to trim silence from the conference recording.
</ParamField>

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

<ParamField path="statusCallback" type="string | undefined" toc={true}>
  URL to receive conference status webhooks.
</ParamField>

<ParamField path="statusCallbackEvent" type="string | undefined" toc={true}>
  Events that trigger status callbacks.
</ParamField>

<ParamField path="statusCallbackEventType" type="string | undefined" toc={true}>
  Content type for status callback requests.
</ParamField>

<ParamField path="statusCallbackMethod" type="string | undefined" toc={true}>
  HTTP method for the status callback (`"GET"` or `"POST"`).
</ParamField>

<ParamField path="recordingStatusCallback" type="string | undefined" toc={true}>
  URL to receive recording status webhooks.
</ParamField>

<ParamField path="recordingStatusCallbackEvent" type="string | undefined" toc={true}>
  Events that trigger recording status callbacks.
</ParamField>

<ParamField path="recordingStatusCallbackEventType" type="string | undefined" toc={true}>
  Content type for recording status callback requests.
</ParamField>

<ParamField path="recordingStatusCallbackMethod" type="string | undefined" toc={true}>
  HTTP method for the recording status callback (`"GET"` or `"POST"`).
</ParamField>

<ParamField path="stream" type={"Record<string, unknown> | undefined"} toc={true}>
  Stream configuration for the conference audio.
</ParamField>

## **Returns**

`Promise<Record<string, unknown>>` -- Server response confirming the join.

## **Example**

```typescript {14}
import { RelayClient } from '@signalwire/sdk';

const client = new RelayClient({
  project: process.env.SIGNALWIRE_PROJECT_ID!,
  token: process.env.SIGNALWIRE_TOKEN!,
  contexts: ['default']
});

client.onCall(async (call) => {
  await call.answer();
  await call.play([{ type: 'tts', text: 'Joining the team conference.' }]);

  // Join a conference
  await call.joinConference('team-standup', {
    beep: 'onEnter',
    startOnEnter: true,
  });

  // The call is now in the conference until it leaves or the call ends
});

await client.run();
```