Skip to main content
Create Project
curl --request POST \
  --url https://api.voicecheap.ai/v1/projects \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <x-api-key>' \
  --data '
{
  "targetLanguage": "<string>",
  "originalLanguage": "<string>",
  "projectName": "<string>",
  "keepBackgroundMusic": true,
  "voiceIsolatorOption": "<string>",
  "subtitles": true,
  "subtitlesSource": "<string>",
  "voiceCloningSettings": {},
  "lipsyncPro": true
}
'

Create Project

Create a new project by uploading a video or audio file. The API starts transcription only (no translation or lip sync). You can open the project in the VoiceCheap app later to trigger translation.

Concurrency Limit

This endpoint shares the same concurrency limit as POST /v1/translate: up to 10 in-progress translations per account. If the limit is reached, requests return CONCURRENT_TRANSLATION_LIMIT_REACHED (HTTP 429).

Request

This endpoint accepts multipart/form-data with a file upload.

Headers

x-api-key
string
required
Your VoiceCheap API key. Get one from app.voicecheap.ai/page-api.

Body Parameters

file
file
required
The video or audio file to upload.Supported video formats: video/mp4, video/quicktime, video/x-matroska, video/webm, video/mpegSupported audio formats: audio/mpeg, audio/wav, audio/mp4, audio/x-m4a, audio/flac, audio/ogg, audio/aacMaximum file size: 20 GB
targetLanguage
string
required
The target language to associate with this project. Must be lowercase.Allowed values: american english, arabic, brazilian portuguese, british english, bulgarian, canadian french, chinese, croatian, czech, danish, dutch, finnish, french, german, greek, hindi, hungarian, indonesian, italian, japanese, korean, malay, mandarin, norwegian, polish, portuguese, romanian, russian, slovak, spanish, swedish, tagalog, tamil, turkish, ukrainian, vietnamese
originalLanguage
string
The source language of the content using ISO language codes (e.g., en, es, fr, de, ja, zh).
Strongly recommended: Leave this empty for auto-detection.Only provide this parameter if you are 100% certain the language code is correct and in valid ISO format. Incorrect language codes will cause transcription failures. Our auto-detection supports 80+ languages and is highly accurate.
Default: auto-detect
projectName
string
A custom name for the project. Useful for identifying projects in your dashboard.Default: The project ID will be used if not provided.
keepBackgroundMusic
boolean
Accepted for compatibility with POST /v1/translate but ignored by this endpoint.
voiceIsolatorOption
string
Accepted for compatibility with POST /v1/translate but ignored by this endpoint.
subtitles
boolean
Accepted for compatibility with POST /v1/translate but ignored by this endpoint.
subtitlesSource
string
Accepted for compatibility with POST /v1/translate but ignored by this endpoint.
voiceCloningSettings
object
Accepted for compatibility with POST /v1/translate but ignored by this endpoint.
lipsyncPro
boolean
Ignored by this endpoint. Use POST /v1/translate if you need lip sync after translation.

Example Request

curl -X POST "https://api.voicecheap.ai/v1/projects" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "file=@/path/to/video.mp4" \
  -F "targetLanguage=french" \
  -F "projectName=Launch Demo"

Example Response

{
  "success": true,
  "message": "Project created. Transcription started.",
  "projectId": "project_123",
  "projectName": "Launch Demo",
  "targetLanguage": "french",
  "status": "processing"
}

Errors

StatusCodeDescription
400FILE_REQUIREDNo file was uploaded with the request
400INVALID_FILE_TYPEThe uploaded file type is not supported
400DURATION_DETECTION_FAILEDCould not detect the duration of the uploaded file
400VIDEO_TOO_LONGThe media duration exceeds the user’s plan limit
400INVALID_BOOLEAN_VALUEA boolean parameter has an invalid value (use “true” or “false”)
400INVALID_JSON_FORMATThe voiceCloningSettings JSON is malformed
401MISSING_API_KEYAPI key is required
401INVALID_API_KEYThe provided API key is invalid
403API_ACCESS_REQUIREDAPI access is required for this account
403SUBSCRIPTION_REQUIREDAPI access requires a paid subscription
429RATE_LIMIT_EXCEEDEDToo many requests (limit: 10 requests per minute)
429CONCURRENT_TRANSLATION_LIMIT_REACHEDToo many translations in progress (limit: 10 concurrent translations)
500INTERNAL_ERRORUnexpected server error