> 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. # OverconstrainedFallbackError > Error thrown when getUserMedia fails with OverconstrainedError and all fallback levels have been exhausted. Raised by the device controller when `getUserMedia` rejects with `OverconstrainedError` and the SDK's built-in fallback ladder — progressively relaxing the requested constraints — has been exhausted without finding a working set. The `deviceKind` property indicates whether the failure was on audio or video capture. ## **Extends** * `Error` ## **Constructors** ### Constructor ```ts new OverconstrainedFallbackError(deviceKind, originalError?): OverconstrainedFallbackError ``` ### Parameters **`deviceKind`** `string` — required Device kind whose constraints could not be satisfied (`audio` or `video`). --- **`originalError`** `unknown` Final `OverconstrainedError` returned after all fallback levels were exhausted. --- ## **Properties** **`deviceKind`** `string` — required Device kind whose constraints could not be satisfied (`audio` or `video`). --- **`originalError`** `unknown` Final `OverconstrainedError` returned after all fallback levels were exhausted. --- ## **Examples** ```ts import { OverconstrainedFallbackError } from '@signalwire/js'; try { await client.enableVideoInput(); } catch (err) { if (err instanceof OverconstrainedFallbackError) { console.error(`no working ${err.deviceKind} device available:`, err.originalError); showPickerWithoutConstraints(); } } ``` > Error thrown when getUserMedia fails with OverconstrainedError and all fallback levels have been exhausted.