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

# toggleHold

> Toggles the hold state of the call (pauses/resumes local media transmission).

```ts
toggleHold(): Promise<void>
```

Toggles the call between active and on-hold. When on hold, the local peer stops sending audio and video, and the remote side typically hears hold music played by the server.

Hold is a call-level state distinct from per-track muting. To silence just the local microphone without affecting the call's hold status, use the [`Participant`](/docs/browser-sdk/v4/reference/participant) audio-mute methods on [`call.self`](/docs/browser-sdk/v4/reference/webrtc-call/self\$).

The action requires the `hold` capability on the call — inspect [`call.capabilities$`](/docs/browser-sdk/v4/reference/webrtc-call/capabilities\$) before exposing the control in your UI.

## **Returns**

`Promise<void>` — resolves once the server has acknowledged the state change.

## **Examples**

### Toggle on a button click

```ts
holdButton.addEventListener('click', async () => {
  await call.toggleHold();
});
```

### Conditional UI based on capability

```ts
import { combineLatest } from 'rxjs';

combineLatest([call.capabilities$, call.status$]).subscribe(([caps, status]) => {
  holdButton.disabled = !caps.includes('hold') || status !== 'connected';
});
```