BeLive Token Hub
API ReferenceVideoKling

Kling 3.0 & 3.0 Omni

Kling 3.0 and Kling 3.0 Omni text-to-video, image-to-video, Omni video generation, and motion control APIs.

All four capabilities use asynchronous tasks. Create a task, keep the returned task ID, and query its status and outputs.

Text to video

ItemValue
MethodPOST
URLhttps://api.tokenhub.belivestudios.com/text-to-video/kling-3.0
AuthenticationHeader Authorization: Bearer sk-your-belive-studios-key
Content-Typeapplication/json
FieldTypeRequiredDefaultValuesDescription
promptstringYes——Positive or negative prompt; max 3,072 characters (2,500 recommended).
settingsobjectNo——Multi-shot, audio, resolution, aspect ratio, and duration settings.
settings.multi_shotbooleanNotrue—Enable multi-shot generation; up to six shots, each at least one second and totaling duration.
settings.audiostringNooffnative, offGenerate matched audio or no audio.
settings.resolutionstringNo720p720p, 1080p, 4kOutput resolution.
settings.aspect_ratiostringNo16:916:9, 9:16, 1:1Output aspect ratio.
settings.durationintegerNo53–15Integer duration in seconds.
optionsobjectNo——Callback, custom task ID, and watermark settings.
options.callback_urlstringNo——Callback URL for status changes.
options.external_task_idstringNo——Account-unique custom ID.
options.watermark_infoobjectNo——Watermark configuration.
options.watermark_info.enabledbooleanNofalse—Also generate a watermarked result.

Create task

curl https://api.tokenhub.belivestudios.com/text-to-video/kling-3.0 \
  -H "Authorization: Bearer sk-your-belive-studios-key" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "A girl looks out of a train window",
  "settings": {"multi_shot": true, "audio": "off", "resolution": "4k", "aspect_ratio": "16:9", "duration": 15},
  "options": {"watermark_info": {"enabled": false}}
}'
{
  "prompt": "A girl looks out of a train window",
  "settings": {
    "multi_shot": true,
    "audio": "off",
    "resolution": "4k",
    "aspect_ratio": "16:9",
    "duration": 15
  },
  "options": {
    "watermark_info": {
      "enabled": false
    }
  }
}

Create response

{
  "code": 0,
  "message": "string",
  "request_id": "string",
  "data": {
    "id": "893605946402811985",
    "status": "submitted",
    "create_time": 1781080778802,
    "update_time": 1781080794151,
    "external_id": "text-task-001"
  }
}

Create response fields

All four create endpoints return the same response structure:

FieldTypeDescription
codeintegerError code; 0 indicates success.
messagestringError or status message.
request_idstringSystem-generated request ID for tracing.
data.idstringSystem-generated task ID.
data.statusstringsubmitted, processing, succeeded, or failed.
data.create_timeintegerCreation time as a Unix millisecond timestamp.
data.update_timeintegerUpdate time as a Unix millisecond timestamp.
data.external_idstringCustom task ID, when supplied.

Query by task ID

GET https://api.tokenhub.belivestudios.com/tasks — provide exactly one of task_ids or external_task_ids; comma-separated batches are supported.

Query parameterTypeRequiredDescription
task_idsstringOne of twoSystem task IDs, comma-separated for a batch.
external_task_idsstringOne of twoCustom task IDs, comma-separated for a batch.
curl "https://api.tokenhub.belivestudios.com/tasks?task_ids=893605946402811985" \
  -H "Authorization: Bearer sk-your-belive-studios-key" \
  -H "Content-Type: application/json"
{
  "code": 0,
  "message": "string",
  "request_id": "string",
  "data": [
    {
      "id": "893605946402811985",
      "status": "succeeded",
      "message": "string",
      "create_time": 1781080778802,
      "update_time": 1781080794151,
      "external_id": "text-task-001",
      "outputs": [
        {
          "type": "video",
          "id": "video-output-id",
          "url": "string",
          "watermark_url": "string",
          "duration": "10"
        },
        {
          "type": "image",
          "url": "string",
          "watermark_url": "string",
          "group_id": "group-1"
        },
        {
          "type": "audio",
          "id": "audio-output-id",
          "mp3_url": "string",
          "wav_url": "string",
          "mp3_duration": "10",
          "wav_duration": "10"
        },
        {
          "type": "voice",
          "id": "voice-output-id",
          "name": "voice",
          "url": "string",
          "owned_by": "kling",
          "status": "succeeded"
        },
        {
          "type": "element",
          "id": "element-output-id",
          "name": "character",
          "description": "string",
          "element_type": "video_character_elements",
          "references": [
            {
              "type": "image",
              "role": "frontal",
              "url": "https://p2-kling.klingai.com/kcdn/cdn-kcdn112452/kling-tob-release_note/image_7.1.png"
            }
          ],
          "owned_by": "kling",
          "status": "succeeded",
          "tags": [
            {
              "id": 1,
              "name": "tag",
              "description": "string"
            }
          ]
        }
      ],
      "billing": [
        {
          "charge_type": "unit",
          "amount": "1",
          "package_type": "video"
        }
      ]
    }
  ]
}

outputs may contain video (id, url, watermark_url, duration), image (url, optional watermark_url and group_id), audio (MP3/WAV URLs and durations), voice, or element results. Billing entries may contain charge_type, cash_type, amount, currency, package_type, and list_price. Result URLs are cleaned up after 30 days.

Response fieldTypeDescription
codeintegerError code; 0 indicates success.
messagestringStatus or error message.
request_idstringRequest ID for tracing.
data[].idstringSystem task ID.
data[].statusstringsubmitted, processing, succeeded, or failed.
data[].messagestringTask status; failure reason may be included.
data[].create_time / update_timeintegerUnix timestamps in milliseconds.
data[].external_idstringCustom task ID, if supplied.
data[].outputsarrayGenerated outputs. Video entries include id, url, watermark_url, and duration; image entries include url, optional watermark_url and group_id; audio entries include id, mp3_url, wav_url, mp3_duration, and wav_duration; voice entries include id, name, url, owned_by, and status; element entries include id, name, description, element_type, references, owned_by, status, and tags.
data[].billingarrayBilling details. Each item may contain charge_type, cash_type, amount, currency, package_type, and list_price.

Query with a cursor

POST https://api.tokenhub.belivestudios.com/tasks only queries asynchronous, non-real-time tasks. For the first request, use a time range and filters. For subsequent pages, pass the previous response's data.next_cursor as cursor; when cursor is supplied, start_time and end_time are ignored. filters[].key is status or product_type; use video for video tasks. The response contains data.result, data.count, data.next_cursor, and data.has_more.

Request fieldTypeDescription
start_timestringStart of the creation-time range (Unix milliseconds); defaults to 30 days before end_time and must be earlier than end_time.
end_timestringEnd of the creation-time range (Unix milliseconds); defaults to now.
cursorstringPrevious data.next_cursor; when supplied, the time range is ignored.
limitintegerNumber of tasks; default 100, maximum 500.
filtersarrayFilter conditions.
filters[].keystringstatus or product_type.
filters[].valuesarrayStatus: submitted, processing, succeeded, failed; product type: video, image, try_on.
data.resultarrayReturned tasks, with the same fields as the task-ID query.
data.countintegerNumber of tasks in this page.
data.next_cursorstringCursor for the next page.
data.has_morebooleanWhether more results are available.
curl https://api.tokenhub.belivestudios.com/tasks \
  -H "Authorization: Bearer sk-your-belive-studios-key" \
  -H "Content-Type: application/json" \
  -d '{
  "limit": 100,
  "filters": [
    {
      "key": "status",
      "values": [
        "succeeded"
      ]
    },
    {
      "key": "product_type",
      "values": [
        "video"
      ]
    }
  ]
}'

To fetch the next page, pass the previous response's data.next_cursor as cursor:

{
  "cursor": "data.next_cursor from the previous response",
  "limit": 100,
  "filters": [
    {
      "key": "product_type",
      "values": ["video"]
    }
  ]
}

On this page