curl --request POST \
--url https://api.ttapi.io/grok/generations \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"last_frame": "<string>",
"model": "grok-imagine-video-1.5-fast",
"aspect_ratio": "16:9",
"video_length": "10",
"resolution_name": "720p",
"hook_url": "https://example.com/callback"
}
'import requests
url = "https://api.ttapi.io/grok/generations"
payload = {
"prompt": "<string>",
"last_frame": "<string>",
"model": "grok-imagine-video-1.5-fast",
"aspect_ratio": "16:9",
"video_length": "10",
"resolution_name": "720p",
"hook_url": "https://example.com/callback"
}
headers = {
"TT-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'TT-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
last_frame: '<string>',
model: 'grok-imagine-video-1.5-fast',
aspect_ratio: '16:9',
video_length: '10',
resolution_name: '720p',
hook_url: 'https://example.com/callback'
})
};
fetch('https://api.ttapi.io/grok/generations', 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://api.ttapi.io/grok/generations",
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' => '<string>',
'last_frame' => '<string>',
'model' => 'grok-imagine-video-1.5-fast',
'aspect_ratio' => '16:9',
'video_length' => '10',
'resolution_name' => '720p',
'hook_url' => 'https://example.com/callback'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"TT-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://api.ttapi.io/grok/generations"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"last_frame\": \"<string>\",\n \"model\": \"grok-imagine-video-1.5-fast\",\n \"aspect_ratio\": \"16:9\",\n \"video_length\": \"10\",\n \"resolution_name\": \"720p\",\n \"hook_url\": \"https://example.com/callback\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TT-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://api.ttapi.io/grok/generations")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"last_frame\": \"<string>\",\n \"model\": \"grok-imagine-video-1.5-fast\",\n \"aspect_ratio\": \"16:9\",\n \"video_length\": \"10\",\n \"resolution_name\": \"720p\",\n \"hook_url\": \"https://example.com/callback\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/grok/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TT-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"last_frame\": \"<string>\",\n \"model\": \"grok-imagine-video-1.5-fast\",\n \"aspect_ratio\": \"16:9\",\n \"video_length\": \"10\",\n \"resolution_name\": \"720p\",\n \"hook_url\": \"https://example.com/callback\"\n}"
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"data": {
"jobId": "jobId"
}
}{
"status": "FAILED",
"message": "\"prompt\" cannot be empty.",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}Last Frame to Video
Last frame to video - Specify the last frame image using last_frame
curl --request POST \
--url https://api.ttapi.io/grok/generations \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"last_frame": "<string>",
"model": "grok-imagine-video-1.5-fast",
"aspect_ratio": "16:9",
"video_length": "10",
"resolution_name": "720p",
"hook_url": "https://example.com/callback"
}
'import requests
url = "https://api.ttapi.io/grok/generations"
payload = {
"prompt": "<string>",
"last_frame": "<string>",
"model": "grok-imagine-video-1.5-fast",
"aspect_ratio": "16:9",
"video_length": "10",
"resolution_name": "720p",
"hook_url": "https://example.com/callback"
}
headers = {
"TT-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'TT-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
last_frame: '<string>',
model: 'grok-imagine-video-1.5-fast',
aspect_ratio: '16:9',
video_length: '10',
resolution_name: '720p',
hook_url: 'https://example.com/callback'
})
};
fetch('https://api.ttapi.io/grok/generations', 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://api.ttapi.io/grok/generations",
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' => '<string>',
'last_frame' => '<string>',
'model' => 'grok-imagine-video-1.5-fast',
'aspect_ratio' => '16:9',
'video_length' => '10',
'resolution_name' => '720p',
'hook_url' => 'https://example.com/callback'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"TT-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://api.ttapi.io/grok/generations"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"last_frame\": \"<string>\",\n \"model\": \"grok-imagine-video-1.5-fast\",\n \"aspect_ratio\": \"16:9\",\n \"video_length\": \"10\",\n \"resolution_name\": \"720p\",\n \"hook_url\": \"https://example.com/callback\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TT-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://api.ttapi.io/grok/generations")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"last_frame\": \"<string>\",\n \"model\": \"grok-imagine-video-1.5-fast\",\n \"aspect_ratio\": \"16:9\",\n \"video_length\": \"10\",\n \"resolution_name\": \"720p\",\n \"hook_url\": \"https://example.com/callback\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/grok/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TT-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"last_frame\": \"<string>\",\n \"model\": \"grok-imagine-video-1.5-fast\",\n \"aspect_ratio\": \"16:9\",\n \"video_length\": \"10\",\n \"resolution_name\": \"720p\",\n \"hook_url\": \"https://example.com/callback\"\n}"
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"data": {
"jobId": "jobId"
}
}{
"status": "FAILED",
"message": "\"prompt\" cannot be empty.",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}last_frame. Only supported by grok-imagine-video-1.5-fast.
Authorizations
You can obtain your API key from the TTAPI Dashboard.
Body
Last frame to video request parameters
Prompt. Supports longer text input.
Last frame image URL. Only supported by grok-imagine-video-1.5-fast. Used to strictly specify the last frame of the video.
Model name. Only grok-imagine-video-1.5-fast is supported: duration 6-30s (6s and 10s are standard durations; 7s and 11s are not supported); supports multiple reference images (max 7); supports first/last frame control.
grok-imagine-video-1.5-fast "grok-imagine-video-1.5-fast"
Video aspect ratio
2:3, 3:2, 1:1, 9:16, 16:9 Video duration in seconds. Range: 6 to 30, where 6s and 10s are standard durations.
Output resolution. Available options: 480p, 720p.
480p, 720p, 1080p Callback URL address. When the task completes or fails, notifications will be sent to this address. The notification data structure is consistent with the fetch structure [blocked]. If not set, you need to call the fetch endpoint [blocked] to query the result
"https://example.com/callback"