API Reference

API Docs

Create synchronized lip-sync videos by combining any video with custom audio. Manage assets, track job status, and retrieve processed outputs — all through a simple REST interface.

REST API
JSON + Multipart
API Key Auth
Base URL https://studio.syncmonster.ai/neuralgarage/saas/api/v1/clients
🔑

Authentication

Every request must include your API key in the request headers. Keep this key secret and never expose it in client-side code.

Required Header
x-api-key YOUR_API_KEY Pass your secret key here
Example Request
curl -X GET \
  https://api.syncmonster.ai/neuralgarage/saas/api/v1/clients/list_assets \
  -H "x-api-key: YOUR_API_KEY"
📡

Status Codes

All API responses include a status field and a corresponding HTTP status code. Use these to handle responses programmatically.

Status Name Description
success Success The request was successful.
created Created The request has been fulfilled and a new resource has been created.
in_progress In Progress The request is being processed.
pending Pending The request is pending and awaiting processing.
invalid_request Invalid Request The request is invalid.
failed Failed The request failed to process.
unauthorized Unauthorized Authentication is required and has failed.
forbidden Forbidden You do not have permission to access this resource.
not_found Not Found The requested resource was not found.
internal_error Internal Server Error An unexpected error occurred on the server.

Endpoints

POST
/visualdub
Create a new visual dubbing job with video and audio assets
⬤ 201 Created
💡 Supports four input modes: URL references, existing asset IDs, direct file upload, or a mix — via JSON or multipart/form-data.
Request Parameters
ParameterTypeRequiredDescription
model string Required Model identifier, e.g. e1, e2, e3
assets array Required (JSON) Array of asset objects with type and url or asset_id
video file Required (Form) Video file — .mp4 or .mov
audio file Required (Form) Audio file — .mp3 or .wav
video_asset_id integer Optional Existing video asset ID (alternative to file upload)
audio_asset_id integer Optional Existing audio asset ID (alternative to file upload)
options object Optional Processing options. See options object below.
webhook string Optional URL to notify when job completes
Options Object
FieldTypeDefaultDescription
intensity integer 2 Sync intensity level — 1 (subtle) to 3 (strong)
Request Options
URL Assets (JSON)
Asset IDs (JSON)
File Upload (Form)
Asset IDs (Form)
JSON
{
  "model": "e2",
  "assets": [
    { "type": "video", "url": "https://example.com/video.mp4" },
    { "type": "audio", "url": "https://example.com/audio.mp3" }
  ],
  "options": { "intensity": 2 },
  "webhook": { "url": "https://yourapp.com/webhook", "headers": {}, "params": {} }
}
Success Response · 201
JSON
{
  "status": "success",
  "message": "Job Created",
  "data": {
    "request_id": "a1b2c3d4e5f6g7h8",    // Use this to poll status
    "assets": [
      { "type": "video", "asset_id": 123 },
      { "type": "audio", "asset_id": 124 }
    ],
    "credit_details": { "credits_deducted": 0 }
  }
}
Error Response
JSON
{
  "status": "failed",
  "message": "Invalid audio format '.txt'. Allowed: .mp4, .mov, .wav, .mp3",
  "data": {
    "error_code": "ERR_008",
    "error_name": "INVALID_FORMAT",
    "message": "Invalid file type. Supported types are: .mp4, .mov"
  }
}
GET
/list_requests
Retrieve a paginated list of all job requests
⬤ 200 OK
Query Parameters
ParameterTypeDefaultDescription
limit integer 10 Records to return per page
page_no integer 0 Page number for pagination
Request
GET /list_requests?limit=10&page_no=0
Success Response · 200
JSON
{
  "status": "success",
  "message": "Requests listed",
  "data": [
    {
      "request_id": "740006cb51da497fa1930dfe10520cc4",
      "status": "Success",
      "status_code": "success",
      "created_at": "2026-04-07T04:13:23",
      "completed_at": "2026-04-07T04:14:04"
    }
  ],
  "total_requests": 14,
  "end_of_records": false
}
GET
/get_status
Get current status of a specific job request
⬤ 200 OK
Query Parameters
ParameterTypeRequiredDescription
request_id string Required The job request ID returned from POST /visualdub
Request
GET /get_status?request_id=a1b2c3d4e5f6g7h8
Success Response · 200
JSON
{
  "status": "success",
  "message": "Request status fetched",
  "data": {
    "request_id": "740006cb51da497fa1930dfe10520cc4",
    "status": "Success",
    "status_code": "success",
    "assets": {
      "video": 38,
      "audio": 45
    }
  }
}
Error Response
JSON
{
  "status": "failed",
  "message": "Request ID not found"
}
GET
/get_file
Download the final processed video for a completed job
⬤ 200 OK · Binary
Query Parameters
ParameterTypeRequiredDescription
request_id string Required The completed job request ID
Request
GET /get_file?request_id=a1b2c3d4e5f6g7h8
Success Response · 200
Response Headers
Content-Type: video/mp4
Content-Disposition: attachment; filename="output.mp4"

// Binary video data stream
Job Still Processing
JSON
{
  "status": "success",
  "data": {
    "request_id": "a1b2c3d4e5f6g7h8",
    "status": "in_progress",
    "status_code": 102,
    "message": "Job is still processing. Please try again later."
  }
}
GET
/list_assets
Retrieve all uploaded assets for the authenticated user
⬤ 200 OK

No parameters required. Returns all assets associated with your API key.

Request
GET /list_assets
Success Response · 200
JSON
{
  "status": "success",
  "message": "Assets listed",
  "data": [
    { "asset_id": 123, "media_type": "video" },
    { "asset_id": 124, "media_type": "audio" },
    { "asset_id": 125, "media_type": "video" }
  ]
}
GET
/get_asset
Retrieve details for a specific asset by ID
⬤ 200 OK
Query Parameters
ParameterTypeRequiredDescription
asset_id integer Required The asset ID to retrieve
Request
GET /get_asset?asset_id=123
Success Response · 200
JSON
{
  "status": "success",
  "message": "Asset Fetched",
  "data": {
    "asset_id": 123,
    "media_type": "video"
  }
}
Error Response
JSON
{
  "status": "failed",
  "message": "Asset not found"
}
🔄

Job Lifecycle

Every visual dubbing job follows this sequence. Poll /get_status until the job is complete, then download with /get_file.

POST /visualdub
Submit job
201 Created
Get request_id
GET /get_status
Poll status
in_progress
Wait & retry
completed
Job done
GET /get_file
Download video
⚙️

Processing Phases

PHASE 01
Scene Detection
Detects scene boundaries in the video. Runs once per unique video asset and can be skipped if already processed.
PHASE 02
Face Detection
Processes all detected scenes in parallel. Extracts face information and landmarks for each scene.
PHASE 03
Visual Dubbing
Creates synchronized lip-sync for scenes where faces were detected. Skipped entirely if no faces found.
PHASE 04
Export
Merges all processed scenes into the final output video, combining original and visual-dubbed content.
⚠️

Error Codes

CodeNameDescription
ERR_003 INTERNAL_SERVER_ERROR An internal server error occurred
ERR_004 NO_FACE_FOUND No face was detected in the provided video
ERR_006 INSUFFICIENT_CREDITS Not enough credits to complete the request
ERR_007 DATA_CORRUPTED Uploaded data is corrupted or invalid
ERR_008 INVALID_FORMAT Unsupported file type. Accepted: .mp4, .mov, .mp3, .wav
ERR_009 LIMIT_EXCEEDS Video duration exceeds the limit.
📁

Supported File Formats

Video
.mp4 — MPEG-4 Video .mov — QuickTime Movie
Audio
.mp3 — MPEG Audio .wav — Waveform Audio