curl --request POST \
--url https://api2.radinai.com/v2/generation/kling-3 \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"enableAudio": true,
"elements": [
{
"type": "image",
"images": [
"image download URL - or file name obtained from /upload endpoint"
],
"voice": "<string>",
"name": "<string>"
}
],
"prompt": "<your-prompt>",
"shots": [
{
"text": "<string>"
}
],
"startImage": "<string>",
"endImage": "<string>"
}
'import requests
url = "https://api2.radinai.com/v2/generation/kling-3"
payload = {
"enableAudio": True,
"elements": [
{
"type": "image",
"images": ["image download URL - or file name obtained from /upload endpoint"],
"voice": "<string>",
"name": "<string>"
}
],
"prompt": "<your-prompt>",
"shots": [{ "text": "<string>" }],
"startImage": "<string>",
"endImage": "<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({
enableAudio: true,
elements: [
{
type: 'image',
images: ['image download URL - or file name obtained from /upload endpoint'],
voice: '<string>',
name: '<string>'
}
],
prompt: '<your-prompt>',
shots: [{text: '<string>'}],
startImage: '<string>',
endImage: '<string>'
})
};
fetch('https://api2.radinai.com/v2/generation/kling-3', 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-3",
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([
'enableAudio' => true,
'elements' => [
[
'type' => 'image',
'images' => [
'image download URL - or file name obtained from /upload endpoint'
],
'voice' => '<string>',
'name' => '<string>'
]
],
'prompt' => '<your-prompt>',
'shots' => [
[
'text' => '<string>'
]
],
'startImage' => '<string>',
'endImage' => '<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-3"
payload := strings.NewReader("{\n \"enableAudio\": true,\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 \"prompt\": \"<your-prompt>\",\n \"shots\": [\n {\n \"text\": \"<string>\"\n }\n ],\n \"startImage\": \"<string>\",\n \"endImage\": \"<string>\"\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-3")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"enableAudio\": true,\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 \"prompt\": \"<your-prompt>\",\n \"shots\": [\n {\n \"text\": \"<string>\"\n }\n ],\n \"startImage\": \"<string>\",\n \"endImage\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api2.radinai.com/v2/generation/kling-3")
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 \"enableAudio\": true,\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 \"prompt\": \"<your-prompt>\",\n \"shots\": [\n {\n \"text\": \"<string>\"\n }\n ],\n \"startImage\": \"<string>\",\n \"endImage\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"genId": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Kling 3
Video Generation using Kling 3.0, 720p, 1080p and 4K
curl --request POST \
--url https://api2.radinai.com/v2/generation/kling-3 \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"enableAudio": true,
"elements": [
{
"type": "image",
"images": [
"image download URL - or file name obtained from /upload endpoint"
],
"voice": "<string>",
"name": "<string>"
}
],
"prompt": "<your-prompt>",
"shots": [
{
"text": "<string>"
}
],
"startImage": "<string>",
"endImage": "<string>"
}
'import requests
url = "https://api2.radinai.com/v2/generation/kling-3"
payload = {
"enableAudio": True,
"elements": [
{
"type": "image",
"images": ["image download URL - or file name obtained from /upload endpoint"],
"voice": "<string>",
"name": "<string>"
}
],
"prompt": "<your-prompt>",
"shots": [{ "text": "<string>" }],
"startImage": "<string>",
"endImage": "<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({
enableAudio: true,
elements: [
{
type: 'image',
images: ['image download URL - or file name obtained from /upload endpoint'],
voice: '<string>',
name: '<string>'
}
],
prompt: '<your-prompt>',
shots: [{text: '<string>'}],
startImage: '<string>',
endImage: '<string>'
})
};
fetch('https://api2.radinai.com/v2/generation/kling-3', 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-3",
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([
'enableAudio' => true,
'elements' => [
[
'type' => 'image',
'images' => [
'image download URL - or file name obtained from /upload endpoint'
],
'voice' => '<string>',
'name' => '<string>'
]
],
'prompt' => '<your-prompt>',
'shots' => [
[
'text' => '<string>'
]
],
'startImage' => '<string>',
'endImage' => '<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-3"
payload := strings.NewReader("{\n \"enableAudio\": true,\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 \"prompt\": \"<your-prompt>\",\n \"shots\": [\n {\n \"text\": \"<string>\"\n }\n ],\n \"startImage\": \"<string>\",\n \"endImage\": \"<string>\"\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-3")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"enableAudio\": true,\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 \"prompt\": \"<your-prompt>\",\n \"shots\": [\n {\n \"text\": \"<string>\"\n }\n ],\n \"startImage\": \"<string>\",\n \"endImage\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api2.radinai.com/v2/generation/kling-3")
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 \"enableAudio\": true,\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 \"prompt\": \"<your-prompt>\",\n \"shots\": [\n {\n \"text\": \"<string>\"\n }\n ],\n \"startImage\": \"<string>\",\n \"endImage\": \"<string>\"\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
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 auto, manual 720, 1080, 4K 3- Kling Image Element
- Video element
Show child attributes
Show child attributes
If no image selected, aspect ratio is required
1:1, 16:9, 9:16 10 - 2500"<your-prompt>"
2 - 6 elementsShow child attributes
Show child attributes
Optional, if not passed, it'll be Text to Video - Required when multi shot is set to 'manual'
1Optional, if passed, start image must be passed too
1Response
Response for status 200

