Record SDK errors and troubleshooting

On this page
  1. Where errors arrive
  2. Error codes
  3. Warnings are not errors
  4. Troubleshooting
  5. Still stuck?

Every failure in the Record SDK carries a short, stable code. This page lists where errors arrive, what each code means and how to fix the problems developers run into most often.

Always branch on code, never on message. Messages are meant for logs and may be reworded.

IntegrationHow you receive errors
Built-in studio (createInstance)The error event on configureButton(), with { code, message }
React DadanRecordButtonThe onError prop
Vue DadanRecordButtonThe error event
Angular DadanRecorderService.on("error", handler) on the object returned by configureButton()
<dadan-recorder>The dadan-error DOM event, with the code in event.detail.code
DadanRecorderThe recording.error event, and rejected promises from methods such as start(), stop() and retryUpload()
Download helpersA thrown VideoDownloadError with code and httpStatus

Methods on DadanRecorder reject with a DadanSdkError:

typescript
import { DadanSdkError } from "@dadan-io/record-sdk";

try {
  await recorder.retryUpload();
} catch (error) {
  if (error instanceof DadanSdkError) {
    console.error(error.code, error.status, error.recoverable);
    if (error.recoverable) showRetryButton();
  }
}
PropertyMeaning
codeStable code, for example mint_failed
statusHTTP status, when the error came from a server response
recoverabletrue when trying again can succeed
messageShort text such as mint_failed (500), safe to log
detailRaw server or network text for your logs. Never show it to users
CodeWhat happenedWhat to do
permission_deniedThe person or the browser blocked camera, microphone or screen accessExplain how to allow access in the browser, then let them try again from a new click
device_not_foundNo camera or microphone is availableOffer a mode that does not need it, such as screen or audio
device_in_useAnother app is using the device, or the browser aborted captureAsk the person to close other apps that use the camera
constraint_failedThe device cannot record at the requested qualityCreate the recorder again with a lower recordingQuality
start_failedCapture could not start for another reasonRetry, and check browser support
recorder_errorThe browser’s recorder failed during recordingThe partial take is kept. Offer to upload it or discard it
unsupportedThe browser lacks a required API, or the page is not secureCheck isSupported() before showing the record button
CodeWhat happenedWhat to do
auth_failedDadan refused to start an upload session, usually because the page’s origin is not allowlistedSee Couldn’t start recording
auth_expiredAn upload token expired or was rejectedCreate the recorder again
publicAppId_requiredNo public app ID was passedPass publicAppId
session_failed, session_unreachable, session_invalid_responseThe session request was refused, timed out (after 30 seconds) or returned something unexpectedRetry later and check the public app ID and origin
mint_failed, mint_unreachable, mint_invalid_responseDadan could not create the video recordOffer retryUpload()
upload_failedThe upload failed after automatic retriesOffer retryUpload(). The take is kept in the browser
upload_cancelled, cancelledYour code or the person cancelledUsually nothing to do
endpoint_rejectedThe upload address returned by the server failed the SDK’s safety checksContact Dadan support
quota_exceededA limit was reachedLog it and show a general message

already_recording, already_starting, upload_in_progress, stop_in_progress, not_recording, not_paused, cannot_switch_device_while_recording, no_blob_to_upload, videoId_required, not_initialized and destroyed mean a method was called in a state that does not allow it. Check getState() and the order of your calls.

CodeMeaning
hook_rejected, hook_abortedYour hook returned false or aborted. This is a quiet stop, not a failure, so there is nothing to show
hook_timeoutA hook took longer than hookTimeoutMs (10 seconds by default)
track_ended_stop_failed, limit_stop_failedStopping after a source ended, or after the time limit, failed. Offer to retry or discard
start_abortedcancel() or destroy() was called while recording was starting

Download helpers use their own codes, such as ORIGIN_DENIED and VIDEO_STILL_PROCESSING. They are listed in Embed and download recordings.

media.warning reports a problem that does not stop the recording:

  • reason: "unavailable": the microphone could not be used in screen or both mode. Recording continues without it.
  • reason: "ended": the microphone or camera stopped during recording, for example because it was unplugged.

The built-in studio shows its own notice for both cases. In a custom interface, tell the person so they are not surprised by a silent video.

The studio shows “Couldn’t start recording. Check that this page Origin is allowlisted for your Dadan public app, then try again.” and you receive auth_failed with the message session_failed (403 ORIGIN_DENIED).

The studio dialog titled Couldn't start recording, asking to check that the page origin is allowlisted for the Dadan public app
What people see when the page origin is not on your allowlist.

The origin in the address bar must exactly match one of the origins allowlisted for your public app ID:

  • The scheme counts: http:// and https:// are different.
  • The host counts: example.com, www.example.com and 127.0.0.1 versus localhost are all different.
  • The port counts: http://localhost:5173 and http://localhost:3000 are different.

In the browser console, a refused session can also appear as a CORS error or as “Failed to fetch”. The fix is the same. To add an origin, open Account & Settings, then Developers, and edit your app in the Public Apps section. See Get a public app ID.

The record button does nothing or stays disabled

Link to section: The record button does nothing or stays disabled
  1. Check that the page is served over HTTPS or from localhost. Browsers block capture on other http:// pages, and isSupported() returns false.
  2. Open the browser console and look for errors from the SDK.
  3. Make sure the studio was created before the click. With your own button, keep it disabled until the SDK is ready, as the framework guides show.

Screen recording is not offered on phones

Link to section: Screen recording is not offered on phones

That is expected. Mobile browsers do not support screen capture, so only camera and audio are available there.

The browser denies screen recording on a Mac

Link to section: The browser denies screen recording on a Mac

macOS must allow the browser to record the screen. Open System Settings, go to Privacy & Security, then Screen & System Audio Recording (called Screen Recording on older versions), enable your browser and restart it.

System and tab audio depend on the browser and the operating system. In Chrome and Edge, audio is most reliable when the person shares a tab and turns on the option to share its audio in the browser’s picker. Microphone audio is not affected.

The take stays in the browser, so nothing is lost straight away. Offer a retry: in the built-in studio, the person can click Retry upload; with DadanRecorder, call retryUpload(). If the page is reloaded, the studio offers to restore the take for up to 24 hours.

Link to section: Download links return VIDEO_STILL_PROCESSING

New uploads need a short processing time. Use fetchVideoDownloadWithRetry or recorder.fetchDownload(), which retry automatically.

TypeScript cannot find @dadan-io/record-sdk-ui/wc

Link to section: TypeScript cannot find @dadan-io/record-sdk-ui/wc

Your tsconfig.json uses the legacy "moduleResolution": "node". Switch to "bundler", "node16" or "nodenext", which understand package subpath exports.

Vue and plain JavaScript projects may see one warning about a "use client" directive from the studio package. It is harmless and can be ignored.

Styles are blocked by a Content Security Policy

Link to section: Styles are blocked by a Content Security Policy

The studio injects a <style> element. Pass your CSP nonce (styleNonce, or the nonce attribute on <dadan-recorder>). See the production checklist.

Contact Dadan support from this Help Center. Include the error code, the message, the page origin, your browser and operating system, and your public app ID. Do not send upload tokens or your API key.

Ask AI about this article

What should the AI help you with?

Are you still facing issues?

Reach out to our support team for further assistance.

dadan