---
title: "Create Desktop SDK Upload"
method: POST
path: "/api/v1/sdk_upload/"
tags: ["sdk_upload"]
---

# Create Desktop SDK Upload

`POST /api/v1/sdk_upload/`

Create a new Desktop SDK upload.

The base rate limit for this endpoint is:
- 300 requests per min per workspace

## Request body

- DesktopSdkUploadRequest
  - `recording_config` DesktopSdkRecordingConfigRequest
    - `video_mixed_mp4` BotRecordingConfigBaseArtifactRequest
      - `metadata` object
    - `audio_mixed_mp3` BotRecordingConfigBaseArtifactRequest
      - `metadata` object
    - `participant_events` BotRecordingConfigBaseArtifactRequest
      - `metadata` object
    - `video_mixed_participant_video_when_screenshare` 'hide' | 'beside' | 'overlap' — * `hide` - hide * `beside` - beside * `overlap` - overlap
    - `transcript` DesktopSdkTranscriptArtifactRequest
      - `metadata` object
      - `provider` DesktopSdkTranscriptProviderRequest, required
        - `recallai_streaming` object — **[Read more in this guide](https://docs.recall.ai/docs/recallai-transcription)**
        - `assembly_ai_v3_streaming` object — Docs: https://www.assemblyai.com/docs/api-reference/streaming-api/streaming-api
          - `speech_model` 'universal-streaming-english' | 'universal-streaming-multilingual' | 'whisper-rt' | 'u3-rt-pro' | 'universal-3-5-pro' — The speech model used for your Streaming session.
          - `format_turns` boolean — Whether to return formatted final transcripts.
          - `inactivity_timeout` integer — Optional time in seconds of inactivity before session is terminated. If not set, no inactivity timeout is applied.
          - `keyterms_prompt` string[] — A list of words and phrases to improve recognition accuracy for. See [Keyterms Prompting](https://www.assemblyai.com/docs/streaming/keyterms-prompting) for more details.
          - `language_detection` string — Whether to detect the language and return language metadata on utterances and final turns. Only available for the multilingual model.
          - `max_turn_silence` integer — The maximum amount of silence in milliseconds allowed in a turn before end of turn is triggered. See [Turn Detection](https://www.assemblyai.com/docs/streaming/universal-streaming/turn-detection) for configuration details.
          - `min_turn_silence` integer — The minimum amount of silence in milliseconds required to detect end of turn when confident. See [Turn Detection](https://www.assemblyai.com/docs/streaming/universal-streaming/turn-detection) for configuration details.
          - `vad_threshold` number — The confidence threshold (0.0 to 1.0) for classifying audio frames as silence. Frames with VAD confidence below this value are considered silent. Increase for noisy environments to reduce false speech detection.
          - `end_of_turn_confidence_threshold` number — The confidence threshold (0.0 to 1.0) to use when determining if the end of a turn has been reached. See [Turn Detection](https://www.assemblyai.com/docs/streaming/universal-streaming/turn-detection) for configuration details.
          - `language` 'en' | 'multi' — The language of your audio stream.
        - `deepgram_streaming` object — Docs: https://developers.deepgram.com/reference/streaming
          - `diarize` string — Defaults to `false`. Recognize speaker changes. Each word in the transcript will be assigned a speaker number starting at 0
          - `dictation` string — Identify and extract key entities from content in submitted audio
          - `endpointing` string — Indicates how long Deepgram will wait to detect whether a speaker has finished speaking or pauses for a significant period of time. When set to a value, the streaming endpoint immediately finalizes the transcription for the processed time range and returns the transcript with a speech_final parameter set to true. Can also be set to false to disable endpointing
          - `extra` unknown
          - `filler_words` string — Filler Words can help transcribe interruptions in your audio, like "uh" and "um"
          - `interim_results` string — Specifies whether the streaming endpoint should provide ongoing transcription updates as more audio is received. When set to true, the endpoint sends continuous updates, meaning transcription results may evolve over time
          - `keyterm` unknown
          - `keywords` unknown
          - `language` 'bg' | 'ca' | 'cs' | 'da' | 'da-DK' | 'de' | 'de-CH' | 'el' | 'en' | 'en-AU' | 'en-GB' | 'en-IN' | 'en-NZ' | 'en-US' | 'es' | 'es-419' | 'es-LATAM' | 'et' | 'fi' | 'fr' | 'fr-CA' | 'hi' | 'hi-Latn' | 'hu' | 'id' | 'it' | 'ja' | 'ko' | 'ko-KR' | 'lt' | 'lv' | 'ms' | 'multi' | 'nl' | 'nl-BE' | 'no' | 'pl' | 'pt' | 'pt-BR' | 'pt-PT' | 'ro' | 'ru' | 'sk' | 'sv' | 'sv-SE' | 'taq' | 'th' | 'th-TH' | 'tr' | 'uk' | 'vi' | 'zh' | 'zh-CN' | 'zh-HK' | 'zh-Hans' | 'zh-Hant' | 'zh-TW' — The [BCP-47 language tag](https://tools.ietf.org/html/bcp47) that hints at the primary spoken language. Depending on the Model you choose only certain languages are available
          - `mip_opt_out` string — Opts out requests from the Deepgram Model Improvement Program. Refer to our Docs for pricing impacts before setting this to true. https://dpgr.am/deepgram-mip
          - `model` 'nova-3' | 'nova-3-general' | 'nova-3-medical' | 'nova-2' | 'nova-2-general' | 'nova-2-meeting' | 'nova-2-finance' | 'nova-2-conversationalai' | 'nova-2-voicemail' | 'nova-2-video' | 'nova-2-medical' | 'nova-2-drivethru' | 'nova-2-automotive' | 'nova' | 'nova-general' | 'nova-phonecall' | 'nova-medical' | 'enhanced' | 'enhanced-general' | 'enhanced-meeting' | 'enhanced-phonecall' | 'enhanced-finance' | 'base' | 'meeting' | 'phonecall' | 'finance' | 'conversationalai' | 'voicemail' | 'video' | 'custom' — AI model to use for the transcription
          - `multichannel` string — Transcribe each audio channel independently
          - `numerals` string — Convert numbers from written format to numerical format
          - `profanity_filter` string — Profanity Filter looks for recognized profanity and converts it to the nearest recognized non-profane word or removes it from the transcript completely
          - `punctuate` string — Add punctuation and capitalization to the transcript
          - `redact` union — Redaction removes sensitive information from your transcripts
            - string
            - string[]
          - `replace` unknown
          - `search` unknown
          - `smart_format` string — Apply formatting to transcript output. When set to true, additional formatting will be applied to transcripts to improve readability
          - `tag` unknown
          - `utterance_end_ms` unknown
          - `vad_events` string — Indicates that speech has started. You'll begin receiving Speech Started messages upon speech starting
          - `version` string — Version of an AI model to use
        - `gladia_v2_streaming` object — Docs: https://docs.gladia.io/reference/live-audio
          - `custom_metadata` object — Custom metadata you can attach to this live transcription
          - `model` 'solaria-1' — The model used to process the audio. "solaria-1" is used by default.
          - `endpointing` number — The endpointing duration in seconds. Endpointing is the duration of silence which will cause an utterance to be considered as finished
          - `maximum_duration_without_endpointing` number — The maximum duration in seconds without endpointing. If endpointing is not detected after this duration, current utterance will be considered as finished
          - `language_config` object — Specify the language configuration
            - `languages` string[] — If one language is set, it will be used for the transcription. Otherwise, language will be auto-detected by the model.
            - `code_switching` boolean — If true, language will be auto-detected on each utterance. Otherwise, language will be auto-detected on first utterance and then used for the rest of the transcription. If one language is set, this option will be ignored.
          - `pre_processing` object — Specify the pre-processing configuration
            - `audio_enhancer` boolean — If true, apply pre-processing to the audio stream to enhance the quality.
            - `speech_threshold` number — Sensitivity configuration for Speech Threshold. A value close to 1 will apply stricter thresholds, making it less likely to detect background sounds as speech.
          - `realtime_processing` object — Specify the realtime processing configuration
            - `custom_vocabulary` boolean — If true, enable custom vocabulary for the transcription.
            - `custom_vocabulary_config` object — Custom vocabulary configuration, if `custom_vocabulary` is enabled
              - …
            - `custom_spelling` boolean — If true, enable custom spelling for the transcription.
            - `custom_spelling_config` object — Custom spelling configuration, if `custom_spelling` is enabled
              - …
            - `translation` boolean — If true, enable translation for the transcription
            - `translation_config` object — Translation configuration, if `translation` is enabled
              - …
            - `named_entity_recognition` boolean — If true, enable named entity recognition for the transcription.
            - `sentiment_analysis` boolean — If true, enable sentiment analysis for the transcription.
          - `post_processing` object — Specify the post-processing configuration
            - `summarization` boolean — If true, generates summarization for the whole transcription.
            - `summarization_config` object — Summarization configuration, if `summarization` is enabled
              - …
            - `chapterization` boolean — If true, generates chapters for the whole transcription.
          - `messages_config` object — Specify the websocket messages configuration
            - `receive_final_transcripts` boolean — If true, final utterance will be sent to websocket.
            - `receive_speech_events` boolean — If true, begin and end speech events will be sent to websocket.
            - `receive_pre_processing_events` boolean — If true, pre-processing events will be sent to websocket.
            - `receive_realtime_processing_events` boolean — If true, realtime processing events will be sent to websocket.
            - `receive_post_processing_events` boolean — If true, post-processing events will be sent to websocket.
            - `receive_acknowledgments` boolean — If true, acknowledgments will be sent to websocket.
            - `receive_errors` boolean — If true, errors will be sent to websocket.
            - `receive_lifecycle_events` boolean — If true, lifecycle events will be sent to websocket.
          - `callback` boolean — If true, messages will be sent to configured url.
          - `callback_config` object — Specify the callback configuration
            - `url` string, uri — URL on which we will do a `POST` request with configured messages
            - `receive_final_transcripts` boolean — If true, final utterance will be sent to the defined callback.
            - `receive_speech_events` boolean — If true, begin and end speech events will be sent to the defined callback.
            - `receive_pre_processing_events` boolean — If true, pre-processing events will be sent to the defined callback.
            - `receive_realtime_processing_events` boolean — If true, realtime processing events will be sent to the defined callback.
            - `receive_post_processing_events` boolean — If true, post-processing events will be sent to the defined callback.
            - `receive_acknowledgments` boolean — If true, acknowledgments will be sent to the defined callback.
            - `receive_errors` boolean — If true, errors will be sent to the defined callback.
            - `receive_lifecycle_events` boolean — If true, lifecycle events will be sent to the defined callback.
        - `speechmatics_streaming` object — You must specify `language` (e.g `en`) Docs: https://docs.speechmatics.com/rt-api-ref#transcription-config
          - `language` string, required
          - `domain` string — Request a specialized model based on 'language' but optimized for a particular field, e.g. "finance" or "medical".
          - `output_locale` string
          - `additional_vocab` object[]
            - `content` string, required
            - `sounds_like` string[]
          - `diarization` 'none' | 'speaker'
          - `max_delay` number
          - `max_delay_mode` 'flexible' | 'fixed'
          - `speaker_diarization_config` object
            - `max_speakers` number
            - `prefer_current_speaker` boolean
            - `speaker_sensitivity` number, float
            - `get_speakers` boolean
            - `speakers` object[]
              - …
          - `audio_filtering_config` object
            - `volume_threshold` number, float
          - `transcript_filtering_config` object
            - `remove_disfluencies` boolean
            - `replacements` object[]
              - …
          - `enable_partials` boolean
          - `enable_entities` boolean
          - `operating_point` 'standard' | 'enhanced'
          - `punctuation_overrides` object
            - `permitted_marks` string[] — The punctuation marks which the client is prepared to accept in transcription output, or the special value 'all' (the default). Unsupported marks are ignored. This value is used to guide the transcription process.
            - `sensitivity` number, float — Ranges between zero and one. Higher values will produce more punctuation. The default is 0.5.
          - `conversation_config` object — This mode will detect when a speaker has stopped talking. The end_of_utterance_silence_trigger is the time in seconds after which the server will assume that the speaker has finished speaking, and will emit an EndOfUtterance message. A value of 0 disables the feature.
            - `end_of_utterance_silence_trigger` number, float
        - `elevenlabs_streaming` object — Docs: https://elevenlabs.io/docs/api-reference/speech-to-text
          - `model_id` string — The model to use for transcription.
          - `language_code` string — ISO 639-1 two-letter language code. When not specified, the model auto-detects the language.
          - `previous_text` string — Text from a previous transcription session to provide context for the model. Sent in the first message to the WebSocket.
    - `realtime_endpoints` BotRecordingConfigRealtimeEndpointRequest[] — Add endpoints here to receive data (e.g transcript, participant events) from the recording in realtime during the meeting. Default: `[]`
      - union
        - BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointRtmpRequest
          - `metadata` object
          - `type` 'rtmp' | 'websocket' | 'webhook' | 'desktop_sdk_callback', required — * `rtmp` - Rtmp * `websocket` - Websocket * `webhook` - Webhook * `desktop_sdk_callback` - Desktop Sdk Callback
          - `url` string, uri, required — The URL of the realtime endpoint.
          - `events` string[], required — The events to send to the realtime endpoint.
        - BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointWebsocketRequest
          - `metadata` object
          - `type` 'rtmp' | 'websocket' | 'webhook' | 'desktop_sdk_callback', required — * `rtmp` - Rtmp * `websocket` - Websocket * `webhook` - Webhook * `desktop_sdk_callback` - Desktop Sdk Callback
          - `url` string, uri, required — The URL of the realtime endpoint.
          - `events` string[], required — The events to send to the realtime endpoint.
        - BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointWebhookRequest
          - `metadata` object
          - `type` 'rtmp' | 'websocket' | 'webhook' | 'desktop_sdk_callback', required — * `rtmp` - Rtmp * `websocket` - Websocket * `webhook` - Webhook * `desktop_sdk_callback` - Desktop Sdk Callback
          - `url` string, uri, required — The URL of the realtime endpoint.
          - `events` string[], required — The events to send to the realtime endpoint.
        - BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointDesktopSdkCallbackRequest
          - `metadata` object
          - `type` 'rtmp' | 'websocket' | 'webhook' | 'desktop_sdk_callback', required — * `rtmp` - Rtmp * `websocket` - Websocket * `webhook` - Webhook * `desktop_sdk_callback` - Desktop Sdk Callback
          - `events` string[], required — The events to send to the realtime endpoint.
    - `retention` BotRecordingConfigRetentionRequest
      - `type` 'timed' | 'forever', required — * `timed` - Timed * `forever` - Forever
      - `hours` integer — The number of hours to retain the recording.
    - `metadata` object
  - `_1080p` boolean
  - `metadata` object

## Response `201`

- DesktopSdkUpload
  - `id` string, uuid, required
  - `status` NewDesktopSdkUploadStatus, required
    - `code` 'pending' | 'recording_started' | 'recording_ended' | 'uploading' | 'complete' | 'failed', required — * `pending` - Pending * `recording_started` - Recording Started * `recording_ended` - Recording Ended * `uploading` - Uploading * `complete` - Complete * `failed` - Failed
    - `sub_code` string, nullable, required
    - `updated_at` string, date-time, required
  - `recording_id` string, uuid, nullable, required
  - `upload_token` string, required
  - `created_at` string, date-time, required
  - `metadata` object

---

[API](https://skmtc.net/recall/apis/recall-ai-api.md) · [All operations](https://skmtc.net/recall/apis/recall-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/recall/recall-ai-api/versions/e1a54c5db790/schema)
