> 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. # toggleHold > Toggles the hold state of the call (pauses/resumes local media transmission). ```ts toggleHold(): Promise ``` 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` — 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'; }); ``` > Toggles the hold state of the call (pauses/resumes local media transmission).