{ "openapi": "3.0.0", "paths": { "/video/cost": { "get": { "operationId": "VideoController_cost", "parameters": [ { "name": "audioUrl", "required": true, "in": "query", "description": "A url to the audio file to be synchronized -- must be publicly accessible", "schema": { "type": "string" } }, { "name": "videoUrl", "required": true, "in": "query", "description": "A url to the video file to be synchronized -- must be publicly accessible", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": [ "video" ] } }, "/video": { "post": { "operationId": "VideoController_lipSync", "summary": "", "description": "Submit a set of urls to publically hosted audio and video files or to YouTube videos. Our synchronizer will sync the video's lip movements to match the audio and return the synced video.", "parameters": [], "requestBody": { "required": true, "description": "The audio + video data to be synced. Set synergize = false to skip our synergizer post-processor for a 10x speedup, but w/ a degredation in output quality.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateVideoDto" } } } }, "responses": { "default": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VideoInitial" } } } } }, "tags": [ "video" ] } }, "/video/{id}": { "get": { "operationId": "VideoController_getLipSyncJob", "summary": "", "description": "Use the video ID from the POST request to check video status. Keep checking until status is 'completed' and a download URL is provided.", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "default": { "description": "Returns video status and URL to download from.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VideoExtended" } } } } }, "tags": [ "video" ] } }, "/video/translate/cost": { "get": { "operationId": "VideoController_translationCost", "parameters": [ { "name": "videoUrl", "required": true, "in": "query", "description": "A url to the video file to be synchronized -- must be publicly accessible", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": [ "video" ] } }, "/video/translate": { "post": { "operationId": "VideoController_translate", "summary": "", "description": "Translates and synchronizes the given video to the specified target language.", "parameters": [], "requestBody": { "required": true, "description": "Required data for translating and synchronizing video. Includes video URL, target language, and optional parameters for model selection, webhook integration, and credit limits.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TranslateVideoDto" } } } }, "responses": { "200": { "description": "The translation job has been successfully created.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TranslationJobInitial" } } } } }, "tags": [ "video" ] } }, "/video/translate/{id}": { "get": { "operationId": "VideoController_getTranslationJob", "summary": "", "description": "Use the video ID from the POST request to check video status. Keep checking until status is 'completed' and a download URL is provided.", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "default": { "description": "Returns video status and URL to download from.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TranslationJobExtended" } } } } }, "tags": [ "video" ] } } }, "info": { "title": "Synchronize API", "description": "Synchronize API allows you to lipsync a video to any audio in any language.", "version": "1.0", "contact": {} }, "tags": [], "servers": [], "components": { "securitySchemes": { "apiKey": { "type": "apiKey", "in": "header", "name": "x-api-key" } }, "schemas": { "CreateVideoDto": { "type": "object", "properties": { "audioUrl": { "type": "string", "description": "A url to the audio file to be synchronized -- must be publicly accessible" }, "videoUrl": { "type": "string", "description": "A url to the video file to be synchronized -- must be publicly accessible" }, "synergize": { "type": "boolean", "description": "A flag to enable / disable post-processing", "default": true }, "maxCredits": { "type": "number", "description": "Maximum number of credits to use for video generation. If job exceeds this value, the job will be aborted", "default": null }, "webhookUrl": { "type": "string", "description": "A url to send a notification to upon completion of video generation", "default": null }, "model": { "type": "string", "description": "The model to use for video generation. Options are sync-1 and sync-1.5", "default": "sync-1" } }, "required": [ "audioUrl", "videoUrl", "synergize", "maxCredits", "webhookUrl", "model" ] }, "VideoInitial": { "type": "object", "properties": { "id": { "type": "string", "description": "A unique identifier for the video." }, "url": { "type": "string", "description": "A URL which can be used to download the video." }, "original_video_url": { "type": "string", "description": "The original URL of the video that was submitted." }, "original_audio_url": { "type": "string", "description": "The original URL of the audio that was submitted." }, "status": { "type": "string", "description": "The status of the video." }, "synergize": { "type": "boolean", "description": "A flag to enable / disable post-processing" } }, "required": [ "id", "original_video_url", "original_audio_url", "status", "synergize" ] }, "VideoExtended": { "type": "object", "properties": { "id": { "type": "string", "description": "A unique identifier for the video." }, "url": { "type": "string", "description": "A URL which can be used to download the video." }, "original_video_url": { "type": "string", "description": "The original URL of the video that was submitted." }, "original_audio_url": { "type": "string", "description": "The original URL of the audio that was submitted." }, "status": { "type": "string", "description": "The status of the video." }, "synergize": { "type": "boolean", "description": "A flag to enable / disable post-processing" }, "credits_deducted": { "type": "number", "description": "The number of credits deducted for the video." } }, "required": [ "id", "original_video_url", "original_audio_url", "status", "synergize", "credits_deducted" ] }, "TranslateVideoDto": { "type": "object", "properties": { "videoUrl": { "type": "string", "description": "A url to the video file to be translated and synchronized -- must be publicly accessible" }, "targetLanguage": { "type": "string", "description": "Target language to translate the video to" }, "maxCredits": { "type": "number", "description": "Maximum number of credits to use for video generation. If job exceeds this value, the job will be aborted", "default": null }, "webhookUrl": { "type": "string", "description": "A url to send a notification to upon completion of video generation", "default": null }, "model": { "type": "string", "description": "The model to use for video generation. Options are sync-1 and sync-1.5", "default": "sync-1" } }, "required": [ "videoUrl", "targetLanguage", "maxCredits", "webhookUrl", "model" ] }, "TranslationJobInitial": { "type": "object", "properties": { "id": { "type": "string", "description": "A unique identifier for the translation job." }, "video_url": { "type": "string", "description": "A URL which can be used to download the video." }, "original_video_url": { "type": "string", "description": "The original URL of the video that was submitted." }, "target_language": { "type": "string", "description": "The language into which the video is being translated." }, "status": { "type": "string", "description": "The status of the translation job." }, "step": { "type": "string", "description": "The step of the translation job." } }, "required": [ "id", "original_video_url", "status", "step" ] }, "TranslationJobExtended": { "type": "object", "properties": { "id": { "type": "string", "description": "A unique identifier for the translation job." }, "video_url": { "type": "string", "description": "A URL which can be used to download the video." }, "audio_url": { "type": "string", "description": "A URL which can be used to download the audio." }, "transcript_url": { "type": "string", "description": "A URL to access the transcript of the video." }, "original_video_url": { "type": "string", "description": "The original URL of the video that was submitted." }, "source_language": { "type": "string", "description": "The source language of the video." }, "target_language": { "type": "string", "description": "The language into which the video is being translated." }, "status": { "type": "string", "description": "The status of the translation job." }, "step": { "type": "string", "description": "The step of the translation job." } }, "required": [ "id", "audio_url", "original_video_url", "source_language", "status", "step" ] } } }, "security": [ { "apiKey": [] } ] }