curl --request POST \
--url https://api2.radinai.com/v2/generation/kling-o3-video-reference \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<your-prompt>",
"video": "<string>",
"images": [
"image download URL - or file name obtained from /upload endpoint"
],
"elements": [
{
"type": "image",
"images": [
"image download URL - or file name obtained from /upload endpoint"
],
"voice": "<string>",
"name": "<string>"
}
]
}
'import requests
url = "https://api2.radinai.com/v2/generation/kling-o3-video-reference"
payload = {
"prompt": "<your-prompt>",
"video": "<string>",
"images": ["image download URL - or file name obtained from /upload endpoint"],
"elements": [
{
"type": "image",
"images": ["image download URL - or file name obtained from /upload endpoint"],
"voice": "<string>",
"name": "<string>"
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<your-prompt>',
video: '<string>',
images: ['image download URL - or file name obtained from /upload endpoint'],
elements: [
{
type: 'image',
images: ['image download URL - or file name obtained from /upload endpoint'],
voice: '<string>',
name: '<string>'
}
]
})
};
fetch('https://api2.radinai.com/v2/generation/kling-o3-video-reference', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api2.radinai.com/v2/generation/kling-o3-video-reference",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'prompt' => '<your-prompt>',
'video' => '<string>',
'images' => [
'image download URL - or file name obtained from /upload endpoint'
],
'elements' => [
[
'type' => 'image',
'images' => [
'image download URL - or file name obtained from /upload endpoint'
],
'voice' => '<string>',
'name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api2.radinai.com/v2/generation/kling-o3-video-reference"
payload := strings.NewReader("{\n \"prompt\": \"<your-prompt>\",\n \"video\": \"<string>\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"elements\": [\n {\n \"type\": \"image\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"voice\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api2.radinai.com/v2/generation/kling-o3-video-reference")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<your-prompt>\",\n \"video\": \"<string>\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"elements\": [\n {\n \"type\": \"image\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"voice\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api2.radinai.com/v2/generation/kling-o3-video-reference")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<your-prompt>\",\n \"video\": \"<string>\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"elements\": [\n {\n \"type\": \"image\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"voice\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"genId": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Kling O3 Video Reference
Generate a new Video using Kling O3 Video Reference, 720p, 1080p or 4K
curl --request POST \
--url https://api2.radinai.com/v2/generation/kling-o3-video-reference \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<your-prompt>",
"video": "<string>",
"images": [
"image download URL - or file name obtained from /upload endpoint"
],
"elements": [
{
"type": "image",
"images": [
"image download URL - or file name obtained from /upload endpoint"
],
"voice": "<string>",
"name": "<string>"
}
]
}
'import requests
url = "https://api2.radinai.com/v2/generation/kling-o3-video-reference"
payload = {
"prompt": "<your-prompt>",
"video": "<string>",
"images": ["image download URL - or file name obtained from /upload endpoint"],
"elements": [
{
"type": "image",
"images": ["image download URL - or file name obtained from /upload endpoint"],
"voice": "<string>",
"name": "<string>"
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<your-prompt>',
video: '<string>',
images: ['image download URL - or file name obtained from /upload endpoint'],
elements: [
{
type: 'image',
images: ['image download URL - or file name obtained from /upload endpoint'],
voice: '<string>',
name: '<string>'
}
]
})
};
fetch('https://api2.radinai.com/v2/generation/kling-o3-video-reference', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api2.radinai.com/v2/generation/kling-o3-video-reference",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'prompt' => '<your-prompt>',
'video' => '<string>',
'images' => [
'image download URL - or file name obtained from /upload endpoint'
],
'elements' => [
[
'type' => 'image',
'images' => [
'image download URL - or file name obtained from /upload endpoint'
],
'voice' => '<string>',
'name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api2.radinai.com/v2/generation/kling-o3-video-reference"
payload := strings.NewReader("{\n \"prompt\": \"<your-prompt>\",\n \"video\": \"<string>\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"elements\": [\n {\n \"type\": \"image\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"voice\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api2.radinai.com/v2/generation/kling-o3-video-reference")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<your-prompt>\",\n \"video\": \"<string>\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"elements\": [\n {\n \"type\": \"image\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"voice\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api2.radinai.com/v2/generation/kling-o3-video-reference")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<your-prompt>\",\n \"video\": \"<string>\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"elements\": [\n {\n \"type\": \"image\",\n \"images\": [\n \"image download URL - or file name obtained from /upload endpoint\"\n ],\n \"voice\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"genId": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Authorizations
API key, obtained from https://radinai.com/manage-api-keys
Query Parameters
Your Webhook URL, if specified, the result of the generation will be POSTed to this URL.
This parameter is for your tests on development, if not set, the generation will actually be submitted and deducted from your balance (suited for production).
if set, a dummy generation will be submitted without deducting from your balance (suited for development) - when set to 'failure', the dummy generation will be 'failed' after a few seconds, if set to 'success', the dummy generation will be 'completed' after a few seconds.
The dummy generation will be available for only 5 minutes to query from 'Get Generation by ID' endpoint, and the result webhook (if webhook is set), will be sent only a few seconds after submitting the dummy generation.
Note 1: in all scenarios, if the initial validation fails, the submit request itself will directly return the validation error.
Note 2: dummy input file isn't supported yet, meaning if you want to test a generation that has input files, you need to supply an actual file (URL or upload via /upload endpoint), this is because some validations happen on input files.
failure, success Body
1600"<your-prompt>"
720, 1080, 4k 11:1, 16:9, 9:16 An array of image names or download URLs - if you don't have a download URL, you can upload the file and get the file name from the /upload endpoint.
414- Kling Image Element
- Video element
Show child attributes
Show child attributes
Response
Response for status 200

