Skip to main content

Kling Task Query

Query Text-to-Video Task

GET /kling/v1/videos/text2video/{task_id}
cURL
curl https://crazyrouter.com/kling/v1/videos/text2video/kling_t2v_abc123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Query Image-to-Video Task

GET /kling/v1/videos/image2video/{task_id}
cURL
curl https://crazyrouter.com/kling/v1/videos/image2video/kling_i2v_abc123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Format

Processing

{
  "code": 0,
  "message": "success",
  "data": {
    "task_id": "kling_t2v_abc123",
    "task_status": "processing",
    "task_status_msg": "Video generating"
  }
}

Completed

{
  "code": 0,
  "message": "success",
  "data": {
    "task_id": "kling_t2v_abc123",
    "task_status": "succeed",
    "task_status_msg": "Success",
    "task_result": {
      "videos": [
        {
          "id": "video_001",
          "url": "https://cdn.klingai.com/videos/...",
          "duration": "5.0"
        }
      ]
    }
  }
}

Failed

{
  "code": 0,
  "message": "success",
  "data": {
    "task_id": "kling_t2v_abc123",
    "task_status": "failed",
    "task_status_msg": "Content moderation failed"
  }
}

Task Status

StatusDescription
submittedSubmitted
processingProcessing
succeedSucceeded
failedFailed

Complete Workflow Example

Python
import requests
import time

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://crazyrouter.com"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

# 1. Submit text-to-video task
resp = requests.post(f"{BASE_URL}/kling/v1/videos/text2video", headers=headers, json={
    "model_name": "kling-v1-6",
    "prompt": "A cat chasing butterflies in a garden",
    "duration": "5",
    "aspect_ratio": "16:9"
})
task_id = resp.json()["data"]["task_id"]

# 2. Poll for results
while True:
    resp = requests.get(f"{BASE_URL}/kling/v1/videos/text2video/{task_id}", headers=headers)
    data = resp.json()["data"]

    if data["task_status"] == "succeed":
        video_url = data["task_result"]["videos"][0]["url"]
        print(f"Video URL: {video_url}")
        break
    elif data["task_status"] == "failed":
        print(f"Failed: {data['task_status_msg']}")
        break

    time.sleep(10)
A polling interval of 10 seconds is recommended. Video generation typically takes 2-5 minutes.