All generation endpoints in the Kling AI API use an asynchronous task pattern:
POST (create task) → GET (poll for status) → read results.
Workflow
123
1. Submit generation request → receive task_id
2. Poll task status until "succeed" or "failed"
3. Read results (video/image URLs) from the completed task
usingKlingAI;usingvarclient=newKlingAIClient(apiKey);// Step 1: Create taskvarcreateResponse=awaitclient.CreateTextToVideoAsync(prompt:"A cat playing piano in a cozy living room",modelName:CreateTextToVideoRequestModelName.KlingV21,mode:CreateTextToVideoRequestMode.Std,duration:CreateTextToVideoRequestDuration.x5);vartaskId=createResponse.Data!.TaskId!;// Step 2: Poll for completionTaskResponsetaskResponse;do{awaitTask.Delay(TimeSpan.FromSeconds(10));taskResponse=awaitclient.GetTextToVideoTaskAsync(id:taskId);}while(taskResponse.Data?.TaskStatusisTaskDataTaskStatus.SubmittedorTaskDataTaskStatus.Processing);// Step 3: Read resultsif(taskResponse.Data?.TaskStatus==TaskDataTaskStatus.Succeed){foreach(varvideointaskResponse.Data.TaskResult?.Videos??[]){Console.WriteLine($"Video: {video.Url} ({video.Duration}s)");}}
Task Statuses
Status
Description
Submitted
Task accepted, queued for processing
Processing
Generation in progress
Succeed
Complete — results available in TaskResult
Failed
Generation failed — check TaskStatusMsg
Callback URL
Instead of polling, you can provide a CallbackUrl in your request. Kling AI
will send a POST request to your URL when the task completes:
123456
varresponse=awaitclient.CreateTextToVideoAsync(request:newCreateTextToVideoRequest{Prompt="A sunset over the ocean",CallbackUrl="https://your-server.com/kling-webhook",});