{"components":{"schemas":{"ValidationDetail":{"properties":{"property":{"type":"string","description":"The property that failed validation"},"message":{"items":{"type":"string"},"type":"array","description":"Validation error messages for the property"}},"type":"object","required":["property","message"]},"ApiErrorResponse":{"properties":{"err":{"type":"string","description":"Error code identifying the specific error"},"reason":{"type":"string","description":"Additional reason describing why the error occurred"},"message":{"type":"string","description":"Error message, used as an alternative to reason for non-enumerated error messages"},"scimType":{"type":"string","description":"SCIM error type, present on SCIM 409 Conflict responses (e.g. uniqueness)"},"details":{"items":{"$ref":"#/components/schemas/ValidationDetail"},"type":"array","description":"Validation error details, present when err is REQUEST_VALIDATION_FAILED"}},"type":"object","required":["err"]},"AspectRatio":{"properties":{"w":{"type":"number","description":"Width component of the aspect ratio"},"h":{"type":"number","description":"Height component of the aspect ratio"},"c":{"type":"boolean","description":"Is custom aspect ratio"}},"type":"object","required":["w","h","c"]},"Video":{"properties":{"title":{"type":"string","description":"The title of the video"},"description":{"type":"string","description":"The description of the video"},"aspectRatio":{"$ref":"#/components/schemas/AspectRatio","description":"The aspect ratio information for the video"},"isShared":{"type":"boolean","description":"Indicates if the video is shared with others"},"thumbnail":{"type":"string","description":"URL of the video thumbnail image"},"animatedThumbnailUrl":{"type":"string","description":"URL of the animated thumbnail for the video"},"isTrashed":{"type":"boolean","description":"Indicates if the video is in trash"},"spaceId":{"type":"string","description":"The ID of the space the video belongs to"},"spaceName":{"type":"string","description":"The name of the space the video belongs to"},"folderId":{"type":"string","description":"The ID of the folder the video is stored in"},"creatorUserId":{"type":"string","description":"User ID of the video creator"},"ownerId":{"type":"string","description":"User ID of the video owner"},"lastModifierId":{"type":"string","description":"User ID of the person who last modified the video"},"updatedAt":{"oneOf":[{"format":"date","type":"string"},{"format":"date-time","type":"string"}],"description":"The timestamp when the video was last updated"},"manualSave":{"type":"integer","description":"Last manual save timestamp of the video"},"autoSave":{"type":"integer","description":"Last auto save timestamp of the video"},"revision":{"type":"integer","description":"The current revision number of the video"},"duration":{"type":"number","description":"The duration of the video in seconds"},"durationFrames":{"type":"integer","description":"The duration of the video in frames"},"numScenes":{"type":"integer","description":"The number of scenes in the video"}},"type":"object","required":["title","description","aspectRatio","isShared","thumbnail","animatedThumbnailUrl","isTrashed","spaceId","spaceName","folderId","creatorUserId","ownerId","lastModifierId","updatedAt","manualSave","autoSave","revision","duration","durationFrames","numScenes"]},"GetContentsReqQuery":{"properties":{"type":{"enum":["video"],"type":"string","description":"Content type to retrieve, only \"video\" is currently supported."},"paginationToken":{"type":"string","description":"If provided, this token retrieves the next set of contents matching the current query. When used, the `order` parameter will be ignored."},"limit":{"type":"integer","description":"Specifies the number of results to return per request. If omitted, the default is 50 items per response."},"order":{"enum":["modifiedDateDescending","modifiedDateAscending","videoTitleDescending","videoTitleAscending","ownerNameAscending","ownerNameDescending","durationAscending","durationDescending"],"type":"string","description":"Determines the order in which results are returned. This parameter is ignored if `paginationToken` is provided."}},"type":"object","required":["type"]},"GetContentsResBody":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/Video"},"type":"array","description":"A list of videos returned for the user. This field is included only when the requested content type is \"video\"."},"nextPaginationToken":{"type":"string","description":"A token that can be used to fetch the next page of results."}},"type":"object","required":["videos"]},"ZapierCallbackInfo":{"properties":{"type":{"type":"string","enum":["zapier"],"description":"Callback info type"},"webhookUrl":{"format":"url","type":"string","description":"Callback URL generated by Zapier. Must starts with `https://hooks.zapier.com/`."}},"type":"object","required":["type"]},"Character":{"properties":{"person":{"type":"number","enum":[1,2],"description":"Index of the character to be replaced."},"src":{"type":"string","description":"Source string of a character."}},"type":"object","required":["person","src"]},"LanguageSetting":{"properties":{"target":{"type":"string","description":"Target language of the generated video."},"accent":{"type":"string","description":"Accent of the target language."}},"type":"object","required":["target","accent"],"description":"Video language setting.","default":{"target":"en","accent":"United States"}},"LayoutSetting":{"properties":{"type":{"type":"string","enum":["TALKING_HEAD","TWO_PERSON_CONVERSATION","NARRATED"],"description":"Type of the layout."}},"type":"object","required":["type"]},"TalkingHeadLayoutSetting":{"properties":{"template":{"type":"string","enum":["TEMP_AI_AVATAR_TEMPLATE","OFFICE","OPEN_OFFICE","HOME","KITCHEN","WAREHOUSE","HEALTHCARE","UNIVERSITY","AIRPORT","FOOD_FACTORY_LINE","BIOTECH_FACILITY","HOTEL_RECEPTION","FAST_FOOD_DINING","SUPERMARKET","CONVENIENCE_STORE","CAMP_SITE","CITY_PARK","GEOMETRIC","BOHO","TRIANGLES","CIRCLES","TIME_SAVE","COFFEE_FOCUS","DINO_STUDY","GOLDEN_LEAVES","BLUE_CITY","AXOLOTL_TO_DO","DESK_CREATURE","PINK_CITY","COZY_LIGHT_OFFICE","MAGENTA_CLASSROOM","HOME_DYNAMIC","WB_TALKING_TEMP","DYNAMIC_WB_EXPLAINER_TEMP","OFFICE_CHAMPION","PLANNED_PRODUCTIVITY","ADMIRE_SUITE","MORNING_ENERGY","MULBERRY_BREAKOUT","D2V_FIT_TALKING_HEAD","D2V_FILL_TALKING_HEAD","CIRCLES_ORANGE","AVATAR_TN_01","BUSINESS_READY_DESIGN_2","AVATAR_AS_MAIN_VISUAL_DESIGN_1","AVATAR_AS_MAIN_VISUAL_DESIGN_2","BUSINESS_READY_DESIGN_1","BUSINESS_READY_DESIGN_3","SMART_CASUAL_DESIGN_2","SPECIFIC_INDUSTRY_DESIGN_1","SPECIFIC_INDUSTRY_DESIGN_2","SPECIAL_THEMES_DESIGN_1","SMART_CASUAL_DESIGN_1","AVATAR_DOCUMENT_AS_BACKGROUND_FILL","AVATAR_DOCUMENT_AS_BACKGROUND_FIT","AVATAR_TN_CIRCLE","AVATAR_TN_INFO_TICKER","AVATAR_TN_PATHFINDER","AVATAR_TN_ABSTRACT_WAVE","AVATAR_TN_APEX_INSIGHT","DIAGNOSTIC_DEBRIEF","CONSULT_CLINIC","STRATEGIC_SESSION","BUSINESS_BRIEFING","OPERATOR","BLUE_STOCKROOM","CORNER_OFFICE_AVATAR","COULSON_AVATAR","TIDAL_AVATAR","CIRRUS_AVATAR","NODE_AVATAR"],"description":"Template of the layout."},"type":{"type":"string","enum":["TALKING_HEAD","TWO_PERSON_CONVERSATION","NARRATED"],"description":"Type of the layout."}},"type":"object","required":["template","type"]},"ConversationLayoutSetting":{"properties":{"template":{"type":"string","enum":["OPEN_OFFICE","RECEPTION_AREA","OFFICE_PANTRY","CONFERENCE_ROOM","STUDY","HOSPITAL_RECEPTION","HOTEL_RECEPTION","WAREHOUSE_1","WAREHOUSE_2","COPY_ROOM","LIVING_ROOM_1","BEDROOM","MACHINERY_PRODUCTION_LINE","OVER_BREAKFAST","HOME_OFFICE_1","LOBBY","FOOD_FACTORY_LINE","BIOTECH_FACILITY","UNIVERSITY","AIRPORT","TRAIN","CITY_PARK","CAMP_SITE","SUPERMARKET","FAST_FOOD_DINING","CONVENIENCE_STORE","HOME_OFFICE_2","LIVING_ROOM_2","WB_CONFERENCE_ROOM","ABSTRACT_BACKGROUND","CATCH_UP","CHAT_DEBRIEF","CLINIC","TELEHEALTH","CASUAL_OFFICE","CUBICLES","WAREHOUSE_3","WAREHOUSE_4"],"description":"Template of the layout."},"type":{"type":"string","enum":["TALKING_HEAD","TWO_PERSON_CONVERSATION","NARRATED"],"description":"Type of the layout."}},"type":"object","required":["template","type"]},"NarratedLayoutSetting":{"properties":{"template":{"type":"string","enum":["ABSTRACT_WAVES","SCRAPBOOK","DYNAMIC","POP_ART","GOLD_ELEMENTAL_1_1","GOLD_ELEMENTAL","GOLD_ELEMENTAL_9_16","SPIRAL_NOTEBOOK","ON_THE_PULSE","PATHFINDER","MARKET_INSIGHTS","MANUFACTURING_PROCESS","MEDICAL_SCIENCE","DIGITAL_NETWORK","LEARNING","TEAMWORK","CREATIVE_COLLABORATION","MIXED_LAYOUT_TEMP","FEATURED_PROP_MIRROR_TEMP","INFO_TICKER","VOICEOVER_SLIDESHOW","FLASH_CARDS","SIMPLE_WHITEBOARD","CERULEAN","D2V_FIT_NARRATION","D2V_FILL_NARRATION","ABSTRACT_WAVES_PURPLE","ON_THE_PULSE_LIGHT_PURPLE","ORBITAL","LATTICE","CONFETTI","MERIDIAN_NARRATION","CITRINA_NARRATION","PRASINO","ARANCIONE","DOSSIER","BEAMO","STRIKE"],"description":"Template of the layout."},"type":{"type":"string","enum":["TALKING_HEAD","TWO_PERSON_CONVERSATION","NARRATED"],"description":"Type of the layout."}},"type":"object","required":["template","type"]},"TextToSpeechSetting":{"properties":{"voiceId":{"type":"string","description":"ID of the text-to-speech voice."},"style":{"type":"string","enum":["advertisement-upbeat","affectionate","angry","assistant","calm","chat","cheerful","conversation","customerservice","depressed","disgruntled","documentary-narration","embarrassed","empathetic","envious","excited","fearful","friendly","gentle","hopeful","lyrical","narration-professional","narration-relaxed","newscast","newscast-casual","newscast-formal","poetry-reading","sad","serious","shouting","sports-commentary","sports-commentary-excited","terrified","unfriendly","whispering","domain_news","effect_soft","effect_whisper","default","Conversational","Promo","Character"],"description":"Style of the text-to-speech voice. Available options depends on the voice provider."},"speed":{"type":"string","enum":["veryFast","fast","mediumFast","slightlyFast","default","slightlySlow","mediumSlow","slow","verySlow"],"description":"Speed of the text-to-speech voice. Available options depends on the voice provider."},"pitch":{"type":"string","enum":["veryHigh","high","mediumHigh","slightlyHigh","default","slightlyLow","mediumLow","low","veryLow"],"description":"Pitch of the text-to-speech voice. Available options depends on the voice provider."}},"type":"object","required":["voiceId"]},"ContentGenerationVyondGoParams":{"properties":{"text":{"type":"string","description":"Context or details about the video to be generated."},"method":{"type":"string","enum":["topic","script"],"description":"Method to use the text or uploaded file for video generation.","default":"topic"},"extractParams":{"type":"boolean","description":"Flag indicating whether video generation settings should be extracted from input data. If true, only `text` or `file` is required."},"callbackInfo":{"type":"object","oneOf":[{"$ref":"#/components/schemas/ZapierCallbackInfo"}],"discriminator":{"propertyName":"type","mapping":{"zapier":"#/components/schemas/ZapierCallbackInfo"}},"description":"Callback settings for notifying Zapier the video generation result.","deprecated":true},"layout":{"type":"object","oneOf":[{"$ref":"#/components/schemas/TalkingHeadLayoutSetting"},{"$ref":"#/components/schemas/ConversationLayoutSetting"},{"$ref":"#/components/schemas/NarratedLayoutSetting"}],"discriminator":{"propertyName":"type","mapping":{"TALKING_HEAD":"#/components/schemas/TalkingHeadLayoutSetting","TWO_PERSON_CONVERSATION":"#/components/schemas/ConversationLayoutSetting","NARRATED":"#/components/schemas/NarratedLayoutSetting"}},"description":"Settings for the video layout.","default":{"type":"TWO_PERSON_CONVERSATION","template":"OPEN_OFFICE"}},"format":{"type":"string","enum":["ANECDOTE","ANNOUNCEMENT","DEBATE","DIATRIBE","HOT_TO","OVERVIEW","TIPS"],"description":"Format of the generated video.","default":"OVERVIEW"},"tone":{"type":"string","enum":["PROFESSIONAL","CASUAL","SERIOUS","FORMAL","PLAYFUL","FRIENDLY","TRUSTWORTHY","ENTERTAINING","INFORMATIVE","SILLY"],"description":"Tone of the generated video.","default":"INFORMATIVE"},"characters":{"items":{"$ref":"#/components/schemas/Character"},"type":"array","uniqueItems":true,"maxItems":2,"description":"Characters to be used in the video. If is not provided for a specific person in the video, default character will be used for that person."},"voices":{"items":{"$ref":"#/components/schemas/TextToSpeechSetting"},"maxItems":2,"type":"array","description":"Text-to-speech setting for each person in the video. Number of required settings is depend on the layout of choice."},"language":{"$ref":"#/components/schemas/LanguageSetting"},"file":{"type":"string","format":"binary","description":"Uploaded file. Only supported in `multipart/form-data` request."}},"type":"object","required":["text"],"description":"Parameters required for `vyondGo` generation type"},"AvatarVoiceParams":{"properties":{"voiceId":{"type":"string","description":"Voice ID from voice provider."},"engine":{"type":"string","enum":["neural","standard","google-chirp3-engine","google-gemini-engine","eleven_v3"],"description":"Engine from voice provider.
Google Chirp3 voices support `google-chirp3-engine` only.
Google Gemini voices support `google-gemini-engine` only.
ElevenLabs voices support `eleven_v3` only.
Azure voices support `neural` only.
AWS voices support either one or both of `neural` and `standard`, depending on each voice.
If value not provided, would determine based on the voice.
Note: if multiple engines are supported by the voice, the default value would be the first one of below order: `google-chirp3-engine`, `google-gemini-engine`, `eleven_v3`, `neural`, `standard`"},"pitch":{"type":"string","enum":["veryHigh","high","mediumHigh","slightlyHigh","default","slightlyLow","mediumLow","low","veryLow"],"description":"Pitch of the voice. Please note that not all voices support the option.","default":"default"},"rate":{"type":"string","enum":["veryFast","fast","mediumFast","slightlyFast","default","slightlySlow","mediumSlow","slow","verySlow"],"description":"Speed of the voice. Please note that not all voices support the option.","default":"default"},"style":{"type":"string","enum":["advertisement-upbeat","affectionate","angry","assistant","calm","chat","cheerful","conversation","customerservice","depressed","disgruntled","documentary-narration","embarrassed","empathetic","envious","excited","fearful","friendly","gentle","hopeful","lyrical","narration-professional","narration-relaxed","newscast","newscast-casual","newscast-formal","poetry-reading","sad","serious","shouting","sports-commentary","sports-commentary-excited","terrified","unfriendly","whispering","domain_news","effect_soft","effect_whisper","default","Conversational","Promo","Character"],"description":"Tone of the voice. Please note that not all voices support the option. First tone available for the voice would be used as default."}},"type":"object","required":["voiceId"],"description":"The voice actor for the AI avatar video. If not provided, an actor based on avatar's gender speaking the provided language would be used."},"ContentGenerationAiAvatarParams":{"properties":{"script":{"type":"string","description":"The text for the avatar to read."},"provider":{"type":"string","enum":["tavus","heygen"],"description":"Avatar provider."},"avatarId":{"type":"string","description":"Avatar ID."},"background":{"type":"string","enum":["default","transparent","Brickwall.png","Colorfullandscape.png","HomeWindow.png","Hospital.png","Lab.png","Office03v.png","Officelobby.png","Pattern_Green02.png"],"description":"Avatar background. By default use the background in avatar from provider.","default":"default"},"customBackground":{"type":"integer","description":"UGC asset ID of avatar custom background, which would override `background` parameter."},"language":{"type":"string","description":"Language of the script.","default":"en-US"},"voice":{"$ref":"#/components/schemas/AvatarVoiceParams"}},"type":"object","required":["script","provider","avatarId"],"description":"Parameters required for `aiAvatar` generation type"},"Webhook":{"properties":{"webhookId":{"type":"string","description":"ID of the webhook"},"name":{"type":"string","description":"Name of the webhook"},"url":{"format":"url","type":"string","description":"URL of the webhook, must be in https"},"events":{"items":{"enum":["video_generation.succeeded","video_generation.failed","video_export.succeeded","video_export.failed","turbo_generation.succeeded","turbo_generation.failed"],"type":"string"},"type":"array","description":"Events that the webhook subscribed to"},"status":{"type":"string","enum":["enabled","disabled"],"description":"Status of the webhook"}},"type":"object","required":["webhookId","url","events","status"]},"WebhookWithSecret":{"properties":{"secret":{"type":"string","description":"Secret of the webhook which is required to [verify signatures](#tag/Webhook/Verifying-Vyond-Signatures) from Vyond, note that this secret is only available at time of webhook creation"},"webhookId":{"type":"string","description":"ID of the webhook"},"name":{"type":"string","description":"Name of the webhook"},"url":{"format":"url","type":"string","description":"URL of the webhook, must be in https"},"events":{"items":{"enum":["video_generation.succeeded","video_generation.failed","video_export.succeeded","video_export.failed","turbo_generation.succeeded","turbo_generation.failed"],"type":"string"},"type":"array","description":"Events that the webhook subscribed to"},"status":{"type":"string","enum":["enabled","disabled"],"description":"Status of the webhook"}},"type":"object","required":["secret","webhookId","url","events","status"]},"CallbackWebhook":{"properties":{"url":{"format":"url","type":"string","description":"Webhook URL. Must be in https protocol."},"secret":{"pattern":"^[0-9A-Za-z]{64}$","type":"string","minLength":64,"maxLength":64,"description":"Webhook secret for [signing the webhook event request by Vyond](#tag/Webhook/Verifying-Vyond-Signatures). If not provided, there is no signature in request. The secret should be in length 64 and contains only digits and English alphabets."}},"type":"object","required":["url"]},"WebhookListResBody":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Webhook"},"type":"array","description":"List of webhooks"}},"type":"object","required":["data"]},"WebhookCreateReqBody":{"properties":{"name":{"type":"string","description":"Name of the webhook"},"url":{"format":"url","type":"string","description":"URL of the webhook, protocol must be https"},"events":{"items":{"enum":["video_generation.succeeded","video_generation.failed","video_export.succeeded","video_export.failed","turbo_generation.succeeded","turbo_generation.failed"],"type":"string"},"type":"array","description":"Events that the webhook subscribed to"}},"type":"object","required":["url","events"]},"WebhookUpdateReqBody":{"properties":{"name":{"type":"string","description":"Name of the webhook"},"url":{"format":"url","type":"string","description":"URL of the webhook, protocol must be https"},"events":{"items":{"enum":["video_generation.succeeded","video_generation.failed","video_export.succeeded","video_export.failed","turbo_generation.succeeded","turbo_generation.failed"],"type":"string"},"type":"array","description":"Events that the webhook subscribed to"},"status":{"type":"string","enum":["enabled","disabled"],"description":"Status of the webhook"}},"type":"object"},"ContentGenerationV2CreateReqBody":{"properties":{"type":{"type":"string","enum":["vyondGo","aiAvatar"],"description":"Generation type"},"callbackWebhook":{"$ref":"#/components/schemas/CallbackWebhook"},"vyondGoParams":{"$ref":"#/components/schemas/ContentGenerationVyondGoParams"},"aiAvatarParams":{"$ref":"#/components/schemas/ContentGenerationAiAvatarParams"}},"type":"object","required":["type"]},"ContentGenerationCreateResBody":{"properties":{"id":{"format":"uuid","type":"string","description":"Generation task ID"}},"type":"object","required":["id"]},"ContentGenerationV2GetResBody":{"properties":{"type":{"type":"string","enum":["vyondGo","aiAvatar"],"description":"Generation type"},"id":{"format":"uuid","type":"string","description":"Generation task ID"},"videoId":{"format":"uuid","type":"string","description":"Video ID"},"status":{"enum":["pending","processing","success","failed"],"type":"string","description":"Task status"},"name":{"type":"string","description":"Video name"},"url":{"type":"string","description":"Vyond web URL of the video"},"downloadUrl":{"format":"url","type":"string","description":"Download URL of generated video"},"expiredAt":{"pattern":"\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?","type":"string","description":"Expiration time of download URL"}},"type":"object","required":["type","id","videoId","status","name","url"]},"ScimListQuery":{"properties":{"startIndex":{"minimum":1,"type":"integer","description":"Index of the first items in the list to return (1 indexed)."},"count":{"minimum":0,"type":"integer","description":"Number of items to return."},"filter":{"type":"string","description":"Filter to narrow down the list of items."}},"type":"object"},"ScimList":{"properties":{"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:api:messages:2.0:ListResponse"]},"totalResults":{"minimum":0,"type":"integer","description":"Total number of items matching the query.","example":1},"startIndex":{"minimum":1,"type":"integer","description":"Index of the first items in the list (1 indexed).","example":1},"itemsPerPage":{"minimum":0,"type":"integer","description":"The maximum number of items returned in a query response page.","example":100}},"type":"object","required":["schemas","totalResults","startIndex","itemsPerPage"]},"ScimBaseMetaObject":{"properties":{"created":{"pattern":"\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?","type":"string","description":"Creation time","example":"2024-09-24T04:19:34.928Z"}},"type":"object","required":["created"]},"ScimUserMetaObject":{"properties":{"resourceType":{"type":"string","enum":["User"],"description":"Resource type"},"created":{"pattern":"\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?","type":"string","description":"Creation time","example":"2024-09-24T04:19:34.928Z"}},"type":"object","required":["resourceType","created"]},"ScimGroupMetaObject":{"properties":{"resourceType":{"type":"string","enum":["Group"],"description":"Resource type"},"created":{"pattern":"\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?","type":"string","description":"Creation time","example":"2024-09-24T04:19:34.928Z"}},"type":"object","required":["resourceType","created"]},"ScimSchemaMetaObject":{"properties":{"resourceType":{"type":"string","enum":["Schema"],"description":"Resource type"}},"type":"object","required":["resourceType"]},"ScimNameObject":{"properties":{"givenName":{"minLength":1,"type":"string","description":"The user's first name.","example":"John"},"familyName":{"minLength":1,"type":"string","description":"The user's last name.","example":"Doe"}},"type":"object","required":["givenName","familyName"]},"ScimEmailObject":{"properties":{"value":{"format":"email","type":"string","description":"The email address.","example":"john.doe@example.com"},"type":{"enum":["work"],"type":"string","description":"A label indicating the function of the email address. Only \"work\" is supported."},"primary":{"type":"boolean","description":"Whether the email address is primary. Always true."}},"type":"object","required":["value","type","primary"]},"ScimEmailObjectWithOptionalAttributes":{"properties":{"value":{"format":"email","type":"string","description":"The email address.","example":"john.doe@example.com"},"type":{"enum":["work"],"type":"string","description":"A label indicating the function of the email address. Only \"work\" is supported."},"primary":{"type":"boolean","description":"Whether the email address is primary. Always true."}},"type":"object","required":["value"]},"ScimAddressObject":{"properties":{"country":{"type":"string","description":"The country code in ISO31661 Alpha2 format.","example":"US"},"type":{"enum":["work"],"type":"string","description":"A label indicating the function of the address. Only \"work\" is supported."},"primary":{"type":"boolean","description":"Whether the address is primary. Always true."}},"type":"object","required":["country","type","primary"]},"ScimAddressObjectWithOptionalAttributes":{"properties":{"country":{"type":"string","description":"The country code in ISO31661 Alpha2 format.","example":"US"},"type":{"enum":["work"],"type":"string","description":"A label indicating the function of the address. Only \"work\" is supported."},"primary":{"type":"boolean","description":"Whether the address is primary. Always true."}},"type":"object","required":["country"]},"ScimSubscriptionObject":{"properties":{"value":{"minLength":1,"type":"string","description":"Vyond subscription ID.","example":"{vyondSubscriptionId}"}},"type":"object","required":["value"]},"ScimEnterpriseUser":{"properties":{"organization":{"minLength":1,"type":"string","description":"Organization to which the user belongs.","example":"Organization Name"}},"type":"object","required":["organization"]},"ScimVyondUserWithOptionalAttributes":{"properties":{"subscription":{"$ref":"#/components/schemas/ScimSubscriptionObject","type":"object","description":"The components of subscription."}},"type":"object"},"ScimVyondUser":{"properties":{"subscription":{"$ref":"#/components/schemas/ScimSubscriptionObject","type":"object","description":"The components of subscription."}},"type":"object","required":["subscription"]},"ScimBaseUser":{"properties":{"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:schemas:core:2.0:User","urn:ietf:params:scim:schemas:extension:enterprise:2.0:User","urn:ietf:params:scim:schemas:extension:vyond:1.0:User"]},"externalId":{"type":"string","description":"An identifier for the resource as defined by the provisioning client.","example":"{idpProvidedExternalId}"},"userName":{"minLength":1,"type":"string","description":"The user's username. It must be an email address, except for special circumstances.","example":"john.doe@example.com"},"name":{"$ref":"#/components/schemas/ScimNameObject","type":"object","description":"The components of the user's name."},"active":{"type":"boolean","description":"User's administrative status. Setting it to false deactivates the user."},"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User":{"$ref":"#/components/schemas/ScimEnterpriseUser","type":"object"}},"type":"object","required":["schemas","userName","name","active","urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]},"ScimUser":{"properties":{"emails":{"items":{"$ref":"#/components/schemas/ScimEmailObjectWithOptionalAttributes"},"type":"array","maxItems":1,"minItems":1,"description":"The components of email. Only one email address is supported for each user. The email address must be the same as userName, except for special circumstances."},"addresses":{"items":{"$ref":"#/components/schemas/ScimAddressObjectWithOptionalAttributes"},"type":"array","maxItems":1,"minItems":1,"description":"The components of address. Only one address is supported for each user."},"urn:ietf:params:scim:schemas:extension:vyond:1.0:User":{"$ref":"#/components/schemas/ScimVyondUserWithOptionalAttributes","type":"object"},"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:schemas:core:2.0:User","urn:ietf:params:scim:schemas:extension:enterprise:2.0:User","urn:ietf:params:scim:schemas:extension:vyond:1.0:User"]},"externalId":{"type":"string","description":"An identifier for the resource as defined by the provisioning client.","example":"{idpProvidedExternalId}"},"userName":{"minLength":1,"type":"string","description":"The user's username. It must be an email address, except for special circumstances.","example":"john.doe@example.com"},"name":{"$ref":"#/components/schemas/ScimNameObject","type":"object","description":"The components of the user's name."},"active":{"type":"boolean","description":"User's administrative status. Setting it to false deactivates the user."},"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User":{"$ref":"#/components/schemas/ScimEnterpriseUser","type":"object"}},"type":"object","required":["emails","addresses","schemas","userName","name","active","urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]},"ScimUserWithMeta":{"properties":{"meta":{"$ref":"#/components/schemas/ScimUserMetaObject","type":"object","description":"Metadata object."},"id":{"type":"string","description":"Vyond user ID.","example":"{vyondUserId}"},"emails":{"items":{"$ref":"#/components/schemas/ScimEmailObject"},"type":"array","maxItems":1,"minItems":1,"description":"The components of email. Only one email address is supported for each user. The email address must be the same as userName, except for special circumstances."},"addresses":{"items":{"$ref":"#/components/schemas/ScimAddressObject"},"type":"array","maxItems":1,"minItems":1,"description":"The components of address. Only one address is supported for each user."},"urn:ietf:params:scim:schemas:extension:vyond:1.0:User":{"$ref":"#/components/schemas/ScimVyondUser","type":"object"},"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:schemas:core:2.0:User","urn:ietf:params:scim:schemas:extension:enterprise:2.0:User","urn:ietf:params:scim:schemas:extension:vyond:1.0:User"]},"externalId":{"type":"string","description":"An identifier for the resource as defined by the provisioning client.","example":"{idpProvidedExternalId}"},"userName":{"minLength":1,"type":"string","description":"The user's username. It must be an email address, except for special circumstances.","example":"john.doe@example.com"},"name":{"$ref":"#/components/schemas/ScimNameObject","type":"object","description":"The components of the user's name."},"active":{"type":"boolean","description":"User's administrative status. Setting it to false deactivates the user."},"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User":{"$ref":"#/components/schemas/ScimEnterpriseUser","type":"object"}},"type":"object","required":["meta","id","emails","addresses","urn:ietf:params:scim:schemas:extension:vyond:1.0:User","schemas","userName","name","active","urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]},"ScimUserList":{"properties":{"Resources":{"items":{"$ref":"#/components/schemas/ScimUserWithMeta"},"type":"array","description":"List of items"},"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:api:messages:2.0:ListResponse"]},"totalResults":{"minimum":0,"type":"integer","description":"Total number of items matching the query.","example":1},"startIndex":{"minimum":1,"type":"integer","description":"Index of the first items in the list (1 indexed).","example":1},"itemsPerPage":{"minimum":0,"type":"integer","description":"The maximum number of items returned in a query response page.","example":100}},"type":"object","required":["Resources","schemas","totalResults","startIndex","itemsPerPage"]},"ScimPatchOperationObject":{"properties":{"op":{"enum":["add","remove","replace"],"type":"string","description":"The operation to perform."},"path":{"type":"string","description":"The path to target attribute."},"value":{"description":"The value to be added/replaced."}},"type":"object","required":["op","value"]},"ScimPatchOp":{"properties":{"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:api:messages:2.0:PatchOp"]},"Operations":{"items":{"$ref":"#/components/schemas/ScimPatchOperationObject"},"type":"array","description":"Patch operations","example":[{"op":"replace","path":"userName","value":"john.doe@example.com"},{"op":"replace","path":"emails[primary eq true].value","value":"john.doe@example.com"}]}},"type":"object","required":["schemas","Operations"]},"ScimGroupMember":{"properties":{"value":{"type":"string"},"type":{"enum":["Group","User","Schema"],"type":"string"}},"type":"object","required":["value","type"]},"ScimGroup":{"properties":{"schemas":{"items":{"type":"string"},"type":"array"},"displayName":{"type":"string"},"members":{"items":{"$ref":"#/components/schemas/ScimGroupMember"},"type":"array"}},"type":"object","required":["schemas","displayName","members"]},"ScimGroupWithMeta":{"properties":{"meta":{"$ref":"#/components/schemas/ScimGroupMetaObject","type":"object"},"id":{"type":"string"},"schemas":{"items":{"type":"string"},"type":"array"},"displayName":{"type":"string"},"members":{"items":{"$ref":"#/components/schemas/ScimGroupMember"},"type":"array"}},"type":"object","required":["meta","id","schemas","displayName","members"]},"ScimGroupList":{"properties":{"Resources":{"items":{"$ref":"#/components/schemas/ScimGroupWithMeta"},"type":"array"},"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:api:messages:2.0:ListResponse"]},"totalResults":{"minimum":0,"type":"integer","description":"Total number of items matching the query.","example":1},"startIndex":{"minimum":1,"type":"integer","description":"Index of the first items in the list (1 indexed).","example":1},"itemsPerPage":{"minimum":0,"type":"integer","description":"The maximum number of items returned in a query response page.","example":100}},"type":"object","required":["Resources","schemas","totalResults","startIndex","itemsPerPage"]},"ScimSchemaAttribute":{"properties":{"name":{"type":"string","description":"Name of the attribute."},"type":{"enum":["string","boolean","decimal","integer","dateTime","binary","reference","complex"],"type":"string","description":"Data type of the attribute."},"multiValued":{"type":"boolean","description":"Whether or not the attribute is multi-valued"},"description":{"type":"string","description":"Description of the attribute."},"required":{"type":"boolean","description":"Whether or not the attribute is required."},"caseExact":{"type":"boolean","description":"Whether or not a string attribute is case sensitive."},"mutability":{"enum":["readOnly","readWrite","immutable","writeOnly"],"type":"string","description":"Keyword that the mutability of the attribute."},"returned":{"enum":["always","never","default","request"],"type":"string","description":"Keyword that indicates when an attribute is returned in response."},"uniqueness":{"enum":["none","server","global"],"type":"string","description":"Keyword that indicates how the uniqueness of the attribute is enforced."},"canonicalValues":{"items":{"type":"string"},"type":"array","description":"A set of values that can be used."},"subAttributes":{"items":{"$ref":"#/components/schemas/ScimSchemaAttribute"},"type":"array","description":"A set of sub-attributes."}},"type":"object","required":["name","type","multiValued","description","required","mutability","returned","subAttributes"]},"ScimSchemaWithMeta":{"properties":{"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:schemas:core:2.0:Schema"]},"meta":{"$ref":"#/components/schemas/ScimSchemaMetaObject","type":"object","description":"Metadata object."},"id":{"type":"string","description":"Schema ID."},"name":{"type":"string","description":"Name of the schema."},"description":{"type":"string","description":"Description of the schema."},"attributes":{"items":{"$ref":"#/components/schemas/ScimSchemaAttribute"},"type":"array","description":"Attributes of the schema."}},"type":"object","required":["schemas","meta","id","name","description","attributes"]},"ScimSchemaList":{"properties":{"Resources":{"items":{"$ref":"#/components/schemas/ScimSchemaWithMeta"},"type":"array","description":"List of items"},"schemas":{"items":{"type":"string"},"type":"array","description":"The URIs of the SCIM schemas.","example":["urn:ietf:params:scim:api:messages:2.0:ListResponse"]},"totalResults":{"minimum":0,"type":"integer","description":"Total number of items matching the query.","example":1},"startIndex":{"minimum":1,"type":"integer","description":"Index of the first items in the list (1 indexed).","example":1},"itemsPerPage":{"minimum":0,"type":"integer","description":"The maximum number of items returned in a query response page.","example":100}},"type":"object","required":["Resources","schemas","totalResults","startIndex","itemsPerPage"]},"GetParametersReqQuery":{"properties":{"feature":{"type":"string","enum":["ai-avatar"],"description":"Target feature"},"parameterKeys":{"items":{"enum":["avatarProvider","avatarId","avatarBackground","avatarCustomBackground","languageCode","voiceProvider","voiceId","voiceEngine","voicePitch","voiceRate","voiceStyle"],"type":"string"},"type":"array","description":"Filter by parameter keys"}},"type":"object","required":["feature"]},"ValueObject":{"properties":{"value":{"not":{"type":"null"},"description":"Parameter value"},"name":{"type":"string","description":"Display name of the parameter value"},"properties":{"type":"object","description":"Properties of the parameter value"}},"type":"object","required":["value"]},"Parameter":{"properties":{"key":{"enum":["avatarProvider","avatarId","avatarBackground","avatarCustomBackground","languageCode","voiceProvider","voiceId","voiceEngine","voicePitch","voiceRate","voiceStyle"],"type":"string"},"name":{"type":"string"},"schema":{"type":"object","description":"OpenAPI schema object"},"values":{"items":{"$ref":"#/components/schemas/ValueObject"},"type":"array","description":"Parameter values information"}},"type":"object","required":["key","name","schema","values"]},"ComponentsObject":{"properties":{"schemas":{"type":"object","description":"OpenAPI schema lookup by name, i.e. `Record`"}},"type":"object","required":["schemas"]},"GetParametersResBody":{"properties":{"parameters":{"items":{"$ref":"#/components/schemas/Parameter"},"type":"array","description":"Parameters available for the feature."},"components":{"$ref":"#/components/schemas/ComponentsObject","type":"object","description":"OpenAPI components object"}},"type":"object","required":["parameters","components"]},"TurboCreateReqBody":{"properties":{"prompt":{"maxLength":10000,"type":"string","minLength":1,"description":"Prompt describing the video to generate."},"mode":{"type":"string","enum":["STILL_IMAGE","VIDEO_CLIP"],"description":"Video generation mode.","default":"STILL_IMAGE"},"files":{"items":{"type":"string","format":"binary"},"maxItems":3,"type":"array","description":"Reference files, each with a maximum size of 104857600 bytes. Documents are limited to 100 pages. Only supported in `multipart/form-data` request."},"callbackWebhook":{"$ref":"#/components/schemas/CallbackWebhook","type":"object","description":"Webhook for listening to webhook events of the Turbo video generation by Vyond."}},"type":"object","required":["prompt"]},"TurboCreateResBody":{"properties":{"id":{"type":"string","description":"Turbo video generation task (thread) ID."}},"type":"object","required":["id"]},"TurboGetResBody":{"properties":{"status":{"type":"string","enum":["queued","processing","completed","failed","cancelled"],"description":"Task status."},"turboThreadUrl":{"type":"string","description":"Vyond web URL of the Turbo thread."},"creditConsumed":{"type":"number","description":"Credits consumed by the generation."},"downloadUrl":{"format":"url","type":"string","description":"Download URL of the generated video."},"expiredAt":{"pattern":"\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d+Z?","type":"string","description":"Expiration time of the download URL."}},"type":"object","required":["status","turboThreadUrl"]},"GetUserResBody":{"properties":{"accountId":{"type":"string"},"email":{"type":"string"},"userId":{"type":"string"},"userPlan":{"type":"string"},"username":{"type":"string"}},"type":"object","required":["accountId","email","userId","userPlan","username"]},"ExportVideoReqBody":{"properties":{"category":{"enum":["mp4","webm","gif","scorm_1_2","scorm_2004_v4"],"type":"string","description":"Video format"},"resolution":{"enum":["240p","360p","480p","600p","720p","1080p"],"type":"string","description":"The resolution of the video"},"revision":{"type":"integer","description":"If no revision provided, it will use the latest revision of the video by default"},"burnInCaption":{"type":"boolean","description":"When burnInCaption is set to true, the captions are rendered directly onto the video frames, making them a permanent part of the video","default":false},"callbackWebhook":{"$ref":"#/components/schemas/CallbackWebhook","type":"object","description":"Webhook for listening webhook events of the video export by Vyond"},"shouldSendEmailNotification":{"type":"boolean","description":"When shouldSendEmailNotification is set to true, system will send the video export result to user's email","default":false},"completionCriteria":{"type":"integer","description":"The completion criteria percentage for SCORM packages (0-100). Required for SCORM exports","minimum":0,"maximum":100}},"type":"object","required":["category","resolution"]},"ExportVideoResBody":{"properties":{"conversionId":{"type":"integer","description":"The conversion ID of the video export task"}},"type":"object","required":["conversionId"]},"GetVideoExportDownloadResBody":{"properties":{"id":{"type":"integer","description":"The conversion ID of the video export task"},"videoId":{"type":"string","description":"The video ID"},"name":{"type":"string","description":"The name of the exported video"},"url":{"type":"string","description":"Vyond web URL of the video"},"revision":{"type":"integer","description":"The revision number associated with this conversion"},"downloadUrl":{"type":"string","description":"The download URL for the video export"},"expireAt":{"type":"string","description":"The expiration timestamp of the download URL (ISO 8601 format)"}},"type":"object","required":["id","videoId","name","url","revision"]}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"info":{"title":"Vyond API Documentation","version":"1.1.0"},"openapi":"3.0.0","paths":{"/rest/v1/generations/":{"post":{"operationId":"ContentGenerationController.createGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGenerationVyondGoParams"}}},"description":"ContentGenerationVyondGoParams","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGenerationCreateResBody"}}},"description":"Object with id = content generation task ID"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required VYOND_GO scope or invalid owner type"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error during content generation creation"}},"summary":"Create content generation","tags":["Content Generation"],"security":[{"bearer":[]}],"description":"Create a new task for content generation","deprecated":true}},"/rest/v2/generations/":{"post":{"operationId":"ContentGenerationV2Controller.createGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGenerationV2CreateReqBody"}}},"description":"ContentGenerationV2CreateReqBody","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGenerationCreateResBody"}}},"description":"Object with id = content generation task ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - invalid or unsupported generation type or parameters. Reason or message may be present"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required scope or invalid owner type. Reason or message may be present"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error during content generation creation"}},"summary":"Create content generation","tags":["Content Generation"],"security":[{"bearer":[]}],"description":"Create a new task for content generation"}},"/rest/v2/generations/{id}":{"get":{"operationId":"ContentGenerationV2Controller.getGeneration","parameters":[{"in":"path","name":"id","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGenerationV2GetResBody"}}},"description":"Content generation details"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - invalid owner type"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - content generation task does not exist"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving content generation"}},"summary":"Get content generation","tags":["Content Generation"],"security":[{"bearer":[]}],"description":"Get content generation details by ID"}},"/scim/v2/Users":{"get":{"operationId":"ScimController.getUsers","parameters":[{"in":"query","name":"startIndex","schema":{"minimum":1,"type":"integer","description":"Index of the first items in the list to return (1 indexed)."}},{"in":"query","name":"count","schema":{"minimum":0,"type":"integer","description":"Number of items to return."}},{"in":"query","name":"filter","schema":{"type":"string","description":"Filter to narrow down the list of items."}}],"responses":{"200":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUserList"}}},"description":"Pagination information and users"},"400":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - invalid filter or pagination parameters. reason contains the invalid filter message"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Forbidden - you do not have permission to access this resource","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving users"}},"summary":"Get users","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Get users in the account with optional filter and pagination"},"post":{"operationId":"ScimController.createUser","requestBody":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUser"}}},"description":"ScimUser","required":false},"responses":{"201":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUserWithMeta"}}},"description":"User information"},"400":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - userName must equal email address. reason contains the validation message"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - SSO not enabled, unsupported country, or insufficient team seats. reason contains the specific reason"},"409":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Conflict - email or username already registered. scimType is uniqueness, reason contains the conflict message"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while creating user"}},"summary":"Create user","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Create a new user in the account"}},"/scim/v2/Users/{userId}":{"get":{"operationId":"ScimController.getUser","parameters":[{"in":"path","name":"userId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"responses":{"200":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUserWithMeta"}}},"description":"User information"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Forbidden - you do not have permission to access this resource","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - user does not exist in the account. reason contains the error message"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving user"}},"summary":"Get user","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Get information of user in the account by user ID"},"put":{"operationId":"ScimController.updateUser","parameters":[{"in":"path","name":"userId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"requestBody":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUser"}}},"description":"ScimUser","required":false},"responses":{"200":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUserWithMeta"}}},"description":"User information"},"400":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - userName must equal email address. reason contains the validation message"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - user does not exist, unsupported country, or insufficient team seats. reason contains the specific reason"},"409":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Conflict - email or username already registered. scimType is uniqueness, reason contains the conflict message"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while updating user"}},"summary":"Update user","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Update information of user in the account by user ID"},"patch":{"operationId":"ScimController.patchUser","parameters":[{"in":"path","name":"userId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"requestBody":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimPatchOp"}}},"description":"ScimPatchOp","required":false},"responses":{"200":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimUserWithMeta"}}},"description":"User information"},"400":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - invalid patch operation or attribute value. May include reason, or details array when validation fails"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - user does not exist, unsupported country, or insufficient team seats. reason contains the specific reason"},"409":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Conflict - email or username already registered. scimType is uniqueness, reason contains the conflict message"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while patching user"}},"summary":"Patch user","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Update individual attributes of user in the account by user ID. The operation follows the [syntax defined in the SCIM specification](https://datatracker.ietf.org/doc/html/rfc7644#section-3.5.2).

Here are some examples:

**Update userName**
The `userName` must be equal to the email address, except for special circumstances. Therefore, update both fields together.
\n```json\n{\n \"schemas\": [\n \"urn:ietf:params:scim:api:messages:2.0:PatchOp\"\n ],\n \"Operations\": [\n {\n \"op\": \"replace\",\n \"path\": \"userName\",\n \"value\": \"john.doe@example.com\"\n },\n {\n \"op\": \"replace\",\n \"path\": \"emails[primary eq true].value\",\n \"value\": \"john.doe@example.com\"\n }\n ]\n}\n```\n
**Deactivate user**
To deactivate a user, set `active` to `false`.
\n```json\n{\n \"schemas\": [\n \"urn:ietf:params:scim:api:messages:2.0:PatchOp\"\n ],\n \"Operations\": [\n {\n \"op\": \"replace\",\n \"path\": \"active\",\n \"value\": false\n }\n ]\n}\n```\n
**Update extended attribute**
To update an extended attribute, its fully qualified name must be provided.
\n```json\n{\n \"schemas\": [\n \"urn:ietf:params:scim:api:messages:2.0:PatchOp\"\n ],\n \"Operations\": [\n {\n \"op\": \"replace\",\n \"path\": \"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:organization\",\n \"value\": \"Organization Name\"\n }\n ]\n}\n```\n"}},"/scim/v2/Schemas":{"get":{"operationId":"ScimController.getSchemas","parameters":[{"in":"query","name":"startIndex","schema":{"minimum":1,"type":"integer","description":"Index of the first items in the list to return (1 indexed)."}},{"in":"query","name":"count","schema":{"minimum":0,"type":"integer","description":"Number of items to return."}},{"in":"query","name":"filter","schema":{"type":"string","description":"Filter to narrow down the list of items."}}],"responses":{"200":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimSchemaList"}}},"description":"Pagination information and schemas"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Forbidden - you do not have permission to access this resource","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving schemas"}},"summary":"Get schemas","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Get SCIM schemas"}},"/scim/v2/Schemas/{id}":{"get":{"operationId":"ScimController.getSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"responses":{"200":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ScimSchemaWithMeta"}}},"description":"Schema information"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Forbidden - you do not have permission to access this resource","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"404":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - schema ID does not exist"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/scim+json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving schema"}},"summary":"Get schema","tags":["SCIM"],"security":[{"bearer":[]}],"description":"Get SCIM schema by ID"}},"/rest/v1/parameters/":{"get":{"operationId":"ParameterController.getParameters","parameters":[{"in":"query","name":"feature","required":true,"schema":{"type":"string","enum":["ai-avatar"],"description":"Target feature"}},{"in":"query","name":"parameterKeys","required":false,"schema":{"items":{"enum":["avatarProvider","avatarId","avatarBackground","avatarCustomBackground","languageCode","voiceProvider","voiceId","voiceEngine","voicePitch","voiceRate","voiceStyle"],"type":"string"},"type":"array","description":"Filter by parameter keys"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetParametersResBody"}}},"description":"API parameters information"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required scope or invalid owner type, or user state validation failed"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving parameters"}},"summary":"Get API parameters information","tags":["Parameter"],"security":[{"bearer":[]}],"description":"Get information (e.g. data type and values) of API parameters, some values may be filtered based on user plan and account available features."}},"/rest/v1/turbo/":{"post":{"operationId":"TurboController.createTurbo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TurboCreateReqBody"}}},"description":"TurboCreateReqBody","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TurboCreateResBody"}}},"description":"Object with id = Turbo video generation task ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - invalid request or files validation failures"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required scope, invalid owner type or no Turbo license"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Unprocessable Entity - malware detected in uploaded files"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error during Turbo generation creation"}},"summary":"Create Turbo video generation","tags":["Turbo"],"security":[{"bearer":[]}],"description":"Create a new Turbo video generation task from a prompt and optional reference files"}},"/rest/v1/turbo/{id}":{"get":{"operationId":"TurboController.getTurbo","parameters":[{"in":"path","name":"id","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TurboGetResBody"}}},"description":"Turbo video generation status details"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required scope, invalid owner type or no Turbo license"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - Turbo generation task not found for the user"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving Turbo generation"}},"summary":"Get Turbo video generation","tags":["Turbo"],"security":[{"bearer":[]}],"description":"Get the status and download URL of a Turbo video generation task by ID"}},"/rest/v1/users/me":{"get":{"operationId":"UserController.getUser","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetUserResBody"}}},"description":"User information"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - invalid owner type (non-user token)"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving user info"}},"summary":"Get current user","tags":["User"],"security":[{"bearer":[]}],"description":"Get information of current user based on the authorization"}},"/rest/v1/videos/{videoId}/exports":{"post":{"operationId":"VideoController.exportVideo","parameters":[{"in":"path","name":"videoId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportVideoReqBody"}}},"description":"ExportVideoReqBody","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportVideoResBody"}}},"description":"Success. Video export task is created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - invalid export parameters"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Payment Required - insufficient credits to perform the export"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required VIDEO_EXPORT scope or access denied"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - video does not exist or is not accessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Conflict - export conversion failed or has not completed yet"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Gone - export conversion was canceled"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Too Many Requests - export rate limit reached"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error during export creation"}},"summary":"Export video","tags":["Video Export"],"security":[{"bearer":[]}],"description":"Create export video task"}},"/rest/v1/videos/{videoId}/exports/{conversionId}":{"get":{"operationId":"VideoController.getVideoExportDownload","parameters":[{"in":"path","name":"videoId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}},{"in":"path","name":"conversionId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetVideoExportDownloadResBody"}}},"description":"Success. Download URL retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Bad Request - conversionId must be a positive integer"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - missing required VIDEO_EXPORT scope or access denied"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - video or conversion does not exist or is not accessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Conflict - export conversion failed or has not completed yet"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Gone - export conversion was canceled"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Too Many Requests - download rate limit reached"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving download URL"}},"summary":"Get video export download URL","tags":["Video"],"description":"Retrieve the download URL for a completed video export"}},"/rest/v1/webhooks/":{"get":{"operationId":"WebhookController.getWebhooks","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookListResBody"}}},"description":"List of webhooks"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - invalid owner type (non-user token)"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while retrieving webhooks"}},"summary":"List webhooks","tags":["Webhook"],"security":[{"bearer":[]}],"description":"List webhooks owned by the user"},"post":{"operationId":"WebhookController.createWebhook","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateReqBody"}}},"description":"WebhookCreateReqBody","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookWithSecret"}}},"description":"Created webhook"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - invalid owner type (non-user token)"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while creating webhook"}},"summary":"Create webhook","tags":["Webhook"],"security":[{"bearer":[]}],"description":"Register a new webhook on Vyond, default enabled"}},"/rest/v1/webhooks/{webhookId}":{"patch":{"operationId":"WebhookController.updateWebhook","parameters":[{"in":"path","name":"webhookId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdateReqBody"}}},"description":"WebhookUpdateReqBody","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"description":"Updated webhook"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - invalid owner type (non-user token)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - webhook does not exist or does not belong to the user"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while updating webhook"}},"summary":"Update webhook","tags":["Webhook"],"security":[{"bearer":[]}],"description":"Update an existing webhook"},"delete":{"operationId":"WebhookController.deleteWebhook","parameters":[{"in":"path","name":"webhookId","required":true,"schema":{"pattern":"[^\\/#\\?]+?","type":"string"}}],"responses":{"204":{"content":{"application/json":{}},"description":"Webhook is deleted successfully"},"401":{"description":"Unauthorized - missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Forbidden - invalid owner type (non-user token)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not Found - webhook does not exist or does not belong to the user"},"429":{"description":"Too Many Requests - rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal Server Error - unexpected error while deleting webhook"}},"summary":"Delete webhook","tags":["Webhook"],"security":[{"bearer":[]}],"description":"Delete an existing webhook"}}},"tags":[{"name":"Introduction","description":"The Vyond API is only available to user with API token or OAuth 2.0 access token.\n\n## Basic\n\nThere are 2 sets of APIs:\n\n- SCIM 2.0 APIs: `https://api.vyond.com/scim/v2/`\n- REST APIs: `https://api.vyond.com/rest/`\n\nREST APIs are versioned `https://api.vyond.com/rest/{version}/{path}`\n\n## Authentication\n\nThe Vyond SCIM 2.0 API uses **API tokens** to authenticate requests. You can view and manage your API tokens in **Security > SCIM Provisioning**, token expiry and renewal is available on the page if your account has SCIM feature provisioned.\n\nThe Vyond REST API uses **OAuth 2.0 access tokens** to authenticate requests. The access token is short-lived and therefore require regular renewal using the refresh token.\n\nNote: Vyond will soon support **API tokens** in REST API authentication.\n"},{"name":"SCIM","description":"SCIM 2.0 APIs\n"},{"name":"Parameter","description":"APIs for getting parameters information\n"},{"name":"User","description":"APIs related to user\n"},{"name":"Video Export","description":"APIs for video export\n"},{"name":"Content Generation","description":"APIs for content generation\n"},{"name":"Turbo","description":"APIs for creating and tracking Turbo video generation tasks.\n\nTurbo lets you generate a video from a text prompt, optionally grounded on reference files (e.g. `.txt`, `.pdf`, `.docx`, `.pptx`). Submit a prompt to start a task, then poll the task by its ID to retrieve the status and, once completed, the download URL of the generated video.\n\n## Webhook events\n\nInstead of polling, you can listen to webhook events to be notified when a Turbo task completes. Webhook events are always emitted for every task, so you can register a webhook subscription (owner type `user`) before the task completes, or supply a one-off `callbackWebhook` in the create request.\n\n| Event | Description |\n| ---------------------------- | ------------------------------------------------------------------------------------------------------------------- |\n| `turbo_generation.succeeded` | The Turbo video generation completed successfully. `data` contains `downloadUrl`, `creditConsumed` and `expiredAt`. |\n| `turbo_generation.failed` | The Turbo video generation failed (or timed out). An `error.code` is included. |\n\nThe event `data` contains `id` (the task/thread ID), `status` and `turboThreadUrl`. Refer to [Webhook events](#tag/Webhook/Webhook-events) for the event body type definition, signature verification and sample payloads.\n"},{"name":"Webhook","description":"APIs for managing webhook\n\n## Verifying Vyond Signatures\n\nVyond webhook events are sent with a signature, which the destination server can use to verify that the events are authentic from Vyond. It is recommended to verify the signature before processing each webhook event.\n\n### How to verify our signatures?\n\n1. Fetch the raw request body.\n\n ```\n const express = require('express');\n const app = express();\n\n app.use(express.json({\n verify: (req, res, buf, encoding) => {\n req.rawBody = buf.toString(encoding || 'utf-8');\n },\n }));\n ```\n\n2. Extract the timestamp from the request header `x-vyond-request-timestamp` and the signature from the request header `x-vyond-signature`.\n\n ```\n const timestamp = req.headers['x-vyond-request-timestamp'];\n const signature = req.headers['x-vyond-signature'];\n ```\n\n3. Create a message by concatenating the timestamp and the raw request body together, using a colon (:) as a delimiter.\n\n ```\n const message = `${timestamp}:${req.rawBody}`;\n ```\n\n4. Verify the signature, an HMAC created using the SHA256 hash function, using the webhook secret as a key.\n\n ```\n const { webcrypto } = require('node:crypto');\n\n const secret = 'your_webhook_secret';\n const enc = new TextEncoder();\n const key = await webcrypto.subtle.importKey(\n 'raw',\n enc.encode(secret),\n {\n name: 'HMAC',\n hash: { name: 'SHA-256' },\n },\n false,\n ['verify'],\n );\n\n const isValid = await webcrypto.subtle.verify(\n { name: 'HMAC' },\n key,\n Buffer.from(signature, 'hex'),\n enc.encode(message),\n );\n ```\n\n5. To enhance security and mitigate the risk of replay attacks, consider verifying the timestamp. Reject requests containing timestamps older than a defined tolerance, such as ten minutes, to ensure that the events are recent and valid.\n\n## Webhook events\n\n### Event body type definition\n\n```typescript\ntype WebhookEventBody = {\n event: string; // Refer to API for possible event types\n data?: Record; // Differ based on event type\n\n // Exists if it is a failure event\n error?: {\n code: string;\n };\n};\n```\n\n### Sample events\n\n**Video generation succeeded**\n\nNote: `expiredAt` is when the `downloadUrl` will expire.\n\n```json\n{\n \"event\": \"video_generation.succeeded\",\n \"data\": {\n \"type\": \"vyondGo\",\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"videoId\": \"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy\",\n \"status\": \"success\",\n \"name\": \"Video name\",\n \"url\": \"https://app.vyond.org/videos/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy\",\n \"downloadUrl\": \"{downloadUrl}\",\n \"expiredAt\": \"2025-01-28T01:42:05.831Z\"\n }\n}\n```\n\n**Video generation failed**\n\n```json\n{\n \"event\": \"video_generation.failed\",\n \"data\": {\n \"type\": \"vyondGo\",\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"videoId\": null,\n \"status\": \"failed\",\n \"name\": null,\n \"url\": null\n },\n \"error\": {\n \"code\": \"UNSUITABLE_CONTENT\"\n }\n}\n```\n\n**Turbo generation succeeded**\n\nNote: `id` is the Turbo video generation task (thread) ID. `expiredAt` is when the `downloadUrl` will expire. `turboThreadUrl` is the webpage URL for you to view the chat and progress.\n\n```json\n{\n \"event\": \"turbo_generation.succeeded\",\n \"data\": {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"status\": \"completed\",\n \"turboThreadUrl\": \"https://app.vyond.com/turbo/t/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"downloadUrl\": \"{downloadUrl}\",\n \"creditConsumed\": 10,\n \"expiredAt\": \"2025-01-28T01:42:05.831Z\"\n }\n}\n```\n\n**Turbo generation failed**\n\nNote: `error.code`: `TIMEOUT` / `GENERATION_FAILED`.\n\n```json\n{\n \"event\": \"turbo_generation.failed\",\n \"data\": {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"status\": \"failed\",\n \"turboThreadUrl\": \"https://app.vyond.com/turbo/t/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n },\n \"error\": {\n \"code\": \"GENERATION_FAILED\"\n }\n}\n```\n\n**Turbo generation cancelled**\n\n```json\n{\n \"event\": \"turbo_generation.cancelled\",\n \"data\": {\n \"id\": \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n \"status\": \"cancelled\",\n \"turboThreadUrl\": \"https://app.vyond.com/turbo/t/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n },\n \"error\": {\n \"code\": \"CANCELLED\"\n }\n}\n```\n"}]}