OpenAPI Specification
openapi: 3.0.3
info:
title: Sync Labs Assets Batch API
description: The Sync Labs API provides studio-grade AI lip-sync and visual dubbing capabilities. Generate perfectly synchronized lip movements for any video and audio input using state-of-the-art models. Supports single generation, batch processing, asset management, and webhook notifications. Used for video localization, content dubbing, personalized video, and educational content translation.
version: v2
contact:
name: Sync Labs Support
email: hello@sync.so
url: https://sync.so
license:
name: Commercial
url: https://sync.so/terms
servers:
- url: https://api.sync.so/v2
description: Sync Labs API v2
security:
- ApiKeyAuth: []
tags:
- name: Batch
description: Batch processing multiple videos
paths:
/batch:
post:
summary: Create Batch Generation
description: Submit multiple generation jobs in a single batch (up to 500 on Scale+ plans)
operationId: createBatch
tags:
- Batch
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchRequest'
responses:
'201':
description: Batch created
content:
application/json:
schema:
$ref: '#/components/schemas/BatchResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
get:
summary: List Batches
description: List all batch jobs for the authenticated account
operationId: listBatches
tags:
- Batch
parameters:
- name: limit
in: query
schema:
type: integer
default: 20
- name: offset
in: query
schema:
type: integer
default: 0
responses:
'200':
description: List of batches
content:
application/json:
schema:
type: object
properties:
batches:
type: array
items:
$ref: '#/components/schemas/BatchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/batch/{id}:
get:
summary: Get Batch Status
description: Retrieve the status and results of a batch job
operationId: getBatch
tags:
- Batch
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Batch job ID
responses:
'200':
description: Batch details
content:
application/json:
schema:
$ref: '#/components/schemas/BatchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
BatchResponse:
type: object
properties:
id:
type: string
description: Unique batch ID
status:
type: string
enum:
- pending
- processing
- completed
- partially_failed
- failed
created_at:
type: string
format: date-time
completed_at:
type: string
format: date-time
nullable: true
total:
type: integer
description: Total number of generations in the batch
completed:
type: integer
description: Number of completed generations
failed:
type: integer
description: Number of failed generations
generations:
type: array
items:
$ref: '#/components/schemas/GenerationResponse'
ModelId:
type: string
enum:
- sync-3
- lipsync-2-pro
- lipsync-2
- lipsync-1.9
- react-1
description: AI model identifier
BatchRequest:
type: object
required:
- generations
properties:
generations:
type: array
maxItems: 500
items:
$ref: '#/components/schemas/GenerationRequest'
description: List of generation requests (up to 500 on Scale+ plans)
webhook_url:
type: string
format: uri
description: URL to receive batch completion notification
GenerationResponse:
type: object
properties:
id:
type: string
description: Unique generation job ID
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: Current job status
created_at:
type: string
format: date-time
description: Job creation timestamp
completed_at:
type: string
format: date-time
nullable: true
description: Job completion timestamp
video_url:
type: string
format: uri
nullable: true
description: URL to the output video (available when completed)
model:
$ref: '#/components/schemas/ModelId'
error:
type: string
nullable: true
description: Error message if status is failed
duration_seconds:
type: number
format: float
description: Duration of the generated video in seconds
cost:
type: number
format: float
nullable: true
description: Actual cost of the generation in USD
GenerationRequest:
type: object
required:
- video_url
- audio_url
- model
properties:
video_url:
type: string
format: uri
description: URL to the source video (MP4 or common video formats)
audio_url:
type: string
format: uri
description: URL to the source audio (WAV or MP3)
video_asset_id:
type: string
description: Alternatively, provide an uploaded video asset ID
audio_asset_id:
type: string
description: Alternatively, provide an uploaded audio asset ID
model:
$ref: '#/components/schemas/ModelId'
webhook_url:
type: string
format: uri
description: URL to receive webhook notification on completion
synergize:
type: boolean
description: Enable multi-speaker detection and selection
max_face_resolution:
type: integer
description: Maximum face resolution cap in pixels
output_format:
type: string
enum:
- mp4
- webm
default: mp4
description: Output video format
Error:
type: object
properties:
error:
type: string
description: Error type
message:
type: string
description: Human-readable error description
request_id:
type: string
description: Request ID for support reference
responses:
Unauthorized:
description: Unauthorized - missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Bad request - invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: API key from https://sync.so/settings/api-keys