## Basic tool info Model name: klingai/kling v4 Model description: Kling V4 by KlingAI generates 5–30s videos from a written prompt or keyframe images. Create controlled motion and camera moves in 720p or 1080p. Model cover: https://cdn.wiro.ai/uploads/models/klingai-kling-v4-cover.mp4 Model categories: - tool - klingai - partner - text-to-video - image-to-video - nogpu-pipeline - quick-showcase - hero-showcase Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/klingai/kling-v4 Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImage label: First Frame help: Optional. First frame for image-to-video. Leave empty for text-to-video. Referenced in the prompt as @image_1. type: combinefileinput default: kling-v4-sampleinput-1.webp - name: prompt label: prompt help: Optional. Required for text-to-video. The prompt to generate the video. Describe audio, dialogue and shots inside the prompt. Keyframes are referenced in order as @image_1, @image_2, ... (first frame, middle frames, last frame). type: textarea default: She takes a big bite of the taco, laughs with her mouth full and gives a thumbs up, while the camera slowly pulls back to reveal the busy night market with glowing string lights and rising steam. Natural market ambience and a sizzling grill. - name: duration label: duration help: Required. Total duration of the generated video in seconds, from 5 to 30. type: select default: 5 options: - value: "5" label: 5 - value: "6" label: 6 - value: "7" label: 7 - value: "8" label: 8 - value: "9" label: 9 - value: "10" label: 10 - value: "11" label: 11 - value: "12" label: 12 - value: "13" label: 13 - value: "14" label: 14 - value: "15" label: 15 - value: "16" label: 16 - value: "17" label: 17 - value: "18" label: 18 - value: "19" label: 19 - value: "20" label: 20 - value: "21" label: 21 - value: "22" label: 22 - value: "23" label: 23 - value: "24" label: 24 - value: "25" label: 25 - value: "26" label: 26 - value: "27" label: 27 - value: "28" label: 28 - value: "29" label: 29 - value: "30" label: 30 - name: resolution label: resolution help: Required. Output video resolution. type: select default: 720p options: - value: "720p" label: 720p - value: "1080p" label: 1080p - name: inputImageMiddle label: Middle Frames help: Optional. Middle keyframes in timeline order. Requires a first frame. Up to 10 images in total across first, middle and last frames. type: combinefileinput default: - name: inputImageLast label: Last Frame help: Optional. Last keyframe. Requires a first frame. type: combinefileinput default: - name: ratio label: ratio help: Optional. Aspect ratio. Only applies to text-to-video; image-to-video derives it from the keyframes. type: select default: 16:9 options: - value: "21:9" label: 21:9 - value: "16:9" label: 16:9 - value: "9:16" label: 9:16 - value: "1:1" label: 1:1 - name: watermark label: watermark help: Optional. Whether to add a watermark to the result. type: select default: false options: - value: "false" label: false - value: "true" label: true ## Model Parameter Inspires: - prompt: She takes a big bite of the taco, laughs with her mouth full and gives a thumbs up, while the camera slowly pulls back to reveal the busy night market with glowing string lights and rising steam. Natural market ambience and a sizzling grill. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/kling-v4-sampleinput-1.webp - prompt: The surfer runs along the rocky cliff edge and leaps off into the crashing turquoise waves below, the camera following in a smooth tracking shot as sea spray bursts in the golden sunrise light. Sound of waves and wind. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/kling-v4-sampleinput-2.webp - prompt: The runner bursts into a sprint across the wet rooftop and leaps across the gap to the next building, landing in a roll as the camera orbits around them, neon reflections rippling in the puddles. Rain, footsteps and a distant city hum. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/kling-v4-sampleinput-3.webp - prompt: The ballerina rises onto her toes, spins into a graceful double pirouette and finishes with a light leap across the sunlit studio, her tutu flowing as golden dust sparkles in the light beams. The camera slowly circles her. Soft piano music and the light tap of pointe shoes on the wooden floor. - inputImage: https://cdn.wiro.ai/uploads/sampleinputs/kling-v4-sampleinput-4.webp ## Integration Header Prepare ```bash # Sign up Wiro dashboard and create project export YOUR_API_KEY="{{useSelectedProjectAPIKey}}"; export YOUR_API_SECRET="XXXXXXXXX"; # unix time or any random integer value export NONCE=$(date +%s); # hmac-SHA256 (YOUR_API_SECRET+Nonce) with YOUR_API_KEY export SIGNATURE="$(echo -n "${YOUR_API_SECRET}${NONCE}" | openssl dgst -sha256 -hmac "${YOUR_API_KEY}" | awk '{print $NF}')"; ``` ## Run Command - Make HTTP Post Request ```bash curl -X POST "https://api.wiro.ai/v1/Run/klingai/kling-v4" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImage": "kling-v4-sampleinput-1.webp", "prompt": "She takes a big bite of the taco, laughs with her mouth full and gives a thumbs up, while the camera slowly pulls back to reveal the busy night market with glowing string lights and rising steam. Natural market ambience and a sizzling grill.", "duration": "5", "resolution": "720p", "inputImageMiddle": [], "inputImageLast": [], "ratio": "16:9", "watermark": "false", "callbackUrl": "You can provide a callback URL; Wiro will send a POST request to it when the task is completed." }'; ``` ## Run Command - Response ```json { "errors": [], "taskid": "2221", "socketaccesstoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt", "result": true } ``` ## Get Task Detail - Make HTTP Post Request with Task ID ```bash curl -X POST "https://api.wiro.ai/v1/Task/Detail" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "2221" }'; ``` ## Get Task Detail - Make HTTP Post Request with Socket Access Token ```bash curl -X POST "https://api.wiro.ai/v1/Task/Detail" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "tasktoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt" }'; ``` ## Get Task Detail - Response ```json { "total": "1", "errors": [], "tasklist": [ { "id": "2221", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "socketaccesstoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt", "parameters": {}, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_postprocess_end", "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "totalcost": "0.003510000000", "chargedcost": "0.002808000000", "discountamount": "0.000702000000", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` totalcost is the list price. chargedcost is the amount actually billed after any discount (a store fee is included on store runs); discountamount is the discount. chargedcost is null until the charge is recorded (shortly after task_postprocess_end) and "0" for a failed or cancelled task. ## Kill Task - Make HTTP Post Request with Task ID ```bash curl -X POST "https://api.wiro.ai/v1/Task/Kill" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "534574" }'; ``` ## Kill Task - Make HTTP Post Request with Socket Access Token ```bash curl -X POST "https://api.wiro.ai/v1/Task/Kill" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE" }'; ``` ## Kill Task - Response ```json { "errors": [], "tasklist": [ { "id": "534574", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "name": "", "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE", "parameters": { "inputImage": "https://api.wiro.ai/v1/File/mCmUXgZLG1FNjjjwmbtPFr2LVJA112/inputImage-6060136.png" }, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_cancel", "cps": "0.000585000000", "totalcost": "0.003510000000", "guestid": null, "projectid": "699", "modelid": "598", "description": "", "basemodelid": "0", "runtype": "model", "modelfolderid": "", "modelfileid": "", "callbackurl": "", "marketplaceid": null, "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "pexit": "0", "categories": "["tool","image-to-image","quick-showcase","compare-landscape"]", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "foldercount": "0", "filecount": "0", "ispublic": 0, "expiretime": null, "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Cancel Task - Make HTTP Post Request (For tasks on queue) ```bash curl -X POST "https://api.wiro.ai/v1/Task/Cancel" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "634574" }'; ``` ## Cancel Task - Response ```json { "errors": [], "tasklist": [ { "id": "634574", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "name": "", "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE", "parameters": { "inputImage": "https://api.wiro.ai/v1/File/mCmUXgZLG1FNjjjwmbtPFr2LVJA112/inputImage-6060136.png" }, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_cancel", "cps": "0.000585000000", "totalcost": "0.003510000000", "guestid": null, "projectid": "699", "modelid": "598", "description": "", "basemodelid": "0", "runtype": "model", "modelfolderid": "", "modelfileid": "", "callbackurl": "", "marketplaceid": null, "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "pexit": "0", "categories": "["tool","image-to-image","quick-showcase","compare-landscape"]", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "foldercount": "0", "filecount": "0", "ispublic": 0, "expiretime": null, "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Task Status Information This section defines the possible task status values returned by the API when polling for task completion. ### Completed Task Statuses (Polling can stop) These indicate that the task has reached a terminal state — either success or failure. Once any of these is received, polling should stop. - task_postprocess_end : Task completed successfully and post-processing is done. - task_cancel : Task was cancelled by the user or system. ### Running Task Statuses (Continue polling) These statuses indicate that the task is still in progress. Polling should continue if one of these is returned. - task_queue : Task is waiting in the queue. - task_accept : Task has been accepted for processing. - task_assign : Task is being assigned to a worker. - task_preprocess_start : Preprocessing is starting. - task_preprocess_end : Preprocessing is complete. - task_start : Task execution has started. - task_output : Output is being generated.