Text to Video
curl --request POST \
--url https://geoff.ai/api/v1/video/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Stack-Id: <x-stack-id>' \
--data '
{
"prompt": "A paper boat drifts across a calm pond",
"tool": "auto"
}
'import requests
url = "https://geoff.ai/api/v1/video/generate"
payload = {
"prompt": "A paper boat drifts across a calm pond",
"tool": "auto"
}
headers = {
"X-Stack-Id": "<x-stack-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Stack-Id': '<x-stack-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({prompt: 'A paper boat drifts across a calm pond', tool: 'auto'})
};
fetch('https://geoff.ai/api/v1/video/generate', 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://geoff.ai/api/v1/video/generate",
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' => 'A paper boat drifts across a calm pond',
'tool' => 'auto'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Stack-Id: <x-stack-id>"
],
]);
$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://geoff.ai/api/v1/video/generate"
payload := strings.NewReader("{\n \"prompt\": \"A paper boat drifts across a calm pond\",\n \"tool\": \"auto\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Stack-Id", "<x-stack-id>")
req.Header.Add("Authorization", "Bearer <token>")
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://geoff.ai/api/v1/video/generate")
.header("X-Stack-Id", "<x-stack-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"A paper boat drifts across a calm pond\",\n \"tool\": \"auto\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://geoff.ai/api/v1/video/generate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Stack-Id"] = '<x-stack-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"A paper boat drifts across a calm pond\",\n \"tool\": \"auto\"\n}"
response = http.request(request)
puts response.read_body{
"data": {},
"trace_id": "<string>"
}{
"error": {
"code": "invalid_request",
"message": "Check the request parameters."
}
}{
"error": {
"code": "unauthorized",
"message": "Supply a valid API key."
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Wait before sending another request."
}
}{
"error": {
"code": "request_failed",
"message": "The request could not be completed."
}
}Video Generation
Text to Video
Generate a video from a text prompt.
POST
/
v1
/
video
/
generate
Text to Video
curl --request POST \
--url https://geoff.ai/api/v1/video/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Stack-Id: <x-stack-id>' \
--data '
{
"prompt": "A paper boat drifts across a calm pond",
"tool": "auto"
}
'import requests
url = "https://geoff.ai/api/v1/video/generate"
payload = {
"prompt": "A paper boat drifts across a calm pond",
"tool": "auto"
}
headers = {
"X-Stack-Id": "<x-stack-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Stack-Id': '<x-stack-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({prompt: 'A paper boat drifts across a calm pond', tool: 'auto'})
};
fetch('https://geoff.ai/api/v1/video/generate', 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://geoff.ai/api/v1/video/generate",
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' => 'A paper boat drifts across a calm pond',
'tool' => 'auto'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Stack-Id: <x-stack-id>"
],
]);
$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://geoff.ai/api/v1/video/generate"
payload := strings.NewReader("{\n \"prompt\": \"A paper boat drifts across a calm pond\",\n \"tool\": \"auto\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Stack-Id", "<x-stack-id>")
req.Header.Add("Authorization", "Bearer <token>")
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://geoff.ai/api/v1/video/generate")
.header("X-Stack-Id", "<x-stack-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"A paper boat drifts across a calm pond\",\n \"tool\": \"auto\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://geoff.ai/api/v1/video/generate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Stack-Id"] = '<x-stack-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"A paper boat drifts across a calm pond\",\n \"tool\": \"auto\"\n}"
response = http.request(request)
puts response.read_body{
"data": {},
"trace_id": "<string>"
}{
"error": {
"code": "invalid_request",
"message": "Check the request parameters."
}
}{
"error": {
"code": "unauthorized",
"message": "Supply a valid API key."
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Wait before sending another request."
}
}{
"error": {
"code": "request_failed",
"message": "The request could not be completed."
}
}Set
For example, use
tool to choose a capability below, or omit it for automatic selection. Supply additional inputs in parameters; keep prompt at the top level.
Tools
| Tool | Capability | Required additional inputs |
|---|---|---|
auto | Choose a tool automatically for the prompt. | None |
generate_video_10_multi | Generate or transform a short video from a prompt. | None |
generate_video_15 | Generate short video clips with frame count, frame rate, and size controls. | None |
generate_video_15_edit | Edit a video using a text prompt. | video |
generate_video_3 | Generate cinematic video clips from a text prompt. | None |
generate_video_6 | Generate a short video clip from a text prompt. | None |
generate_video_6_unlocked | Generate a short video clip from a text prompt. | None |
generate_video_7x_multi | Generate videos with synchronized audio from text, keyframes, or image, video, and audio references. | None |
generate_video_7xxz_multi | Generate videos quickly with synchronized audio from text or keyframes. | None |
generate_video_edit_remove | Remove a subject from a video. | video_url, remove_target |
generate_video_edit_v_1 | Edit an existing video with a text-guided transformation. | video |
generate_video_edit_v_4 | Edit an existing video with a text-guided transformation. | video_url |
generate_video_edit_v_5 | Edit a video with text instructions. | video_url |
generate_video_from_image_3 | Animate a reference image into a cinematic video clip. | image |
generate_video_from_image_6 | Generate a short video clip from a text prompt and a single reference image. | reference_image_url |
generate_video_from_image_6_unlocked | Generate a short video clip from a text prompt and a single reference image. | reference_image_url |
generate_video_from_image_audio_v_3 | Generate a high-fidelity video from a starting frame plus optional style references. | None |
generate_video_from_image_v1 | Animate a still image into a video clip quickly. | image |
generate_video_from_image_v_3 | Animate a still image into a high-fidelity video clip. | image |
generate_video_from_image_v_4 | Animate a single still image into a high-fidelity video clip. | image_url |
generate_video_from_media_v_2 | Generate a video from multiple media references (images and/or audio). | media |
generate_video_from_reference_v1 | Generate a video that matches the style and composition of a reference. | reference |
generate_video_from_refs_v_4 | Generate a high-fidelity video from a text prompt plus 1-9 character reference images. | reference_image_urls |
generate_video_from_text_v_1 | Generate a short video clip quickly from a text prompt. | None |
generate_video_from_text_v_3 | Generate detailed video clips with support for longer durations. | None |
generate_video_from_text_v_4 | Generate a high-fidelity video clip from a text prompt. | None |
generate_video_from_text_v_5 | Generate a video from a text prompt with optional audio. | None |
generate_video_from_video_and_image_1 | Animate a character image using motion from a reference video. | image_url, video_url |
generate_video_lipsync_6 | Generate a lip-synced video clip from a text prompt, a reference image of the subject, and a supplied audio track. | reference_image_url, audio_url |
generate_video_multishot | Generate a multi-scene cinematic video from a single story prompt. | None |
generate_video_stacked | Generate and animate five camera views of a subject from a text prompt. | None |
generate_video_unlocked_1 | Animate a still image into a short video clip. | image |
generate_video_unlocked_2 | Generate a short video clip from a text prompt. | None |
generate_video_v_11_multi | Generate videos from text, first and last frames, or mixed media references. | None |
generate_video_v_14_multi | Edit a source video with a prompt and reference images, or make a new clip guided by it. | reference_video_url |
generate_video_v_3_multi | Generate detailed videos from text, keyframes, or image, video, and audio references. | None |
generate_video_v_4_multi | Generate videos from text or character images, animate still images, or edit existing videos. | None |
generate_video_v_6_multi | Generate videos from text or reference images, transition between frames, or extend an existing clip. | None |
generate_video_v_7_multi | Generate videos with synchronized audio from text, keyframes, or media references. | None |
generate_video_v_7z_multi | Generate videos with synchronized audio from text or keyframes, with optional detail enhancement. | None |
generate_video_v_8_multi | Generate videos up to 30 seconds long from text, keyframes, or mixed media references. | None |
parameters for reference images or output settings supported by your selected tool.Authorizations
Bearer API_key, can be found in Account Management > API Keys.
Headers
Supplied automatically by the documentation playground.
Body
application/json
Describe what to create.
Minimum string length:
1Optional tool selection.
Available options:
auto, generate_video_10_multi, generate_video_15, generate_video_15_edit, generate_video_3, generate_video_6, generate_video_6_unlocked, generate_video_7x_multi, generate_video_7xxz_multi, generate_video_edit_remove, generate_video_edit_v_1, generate_video_edit_v_4, generate_video_edit_v_5, generate_video_from_image_3, generate_video_from_image_6, generate_video_from_image_6_unlocked, generate_video_from_image_audio_v_3, generate_video_from_image_v1, generate_video_from_image_v_3, generate_video_from_image_v_4, generate_video_from_media_v_2, generate_video_from_reference_v1, generate_video_from_refs_v_4, generate_video_from_text_v_1, generate_video_from_text_v_3, generate_video_from_text_v_4, generate_video_from_text_v_5, generate_video_from_video_and_image_1, generate_video_lipsync_6, generate_video_multishot, generate_video_stacked, generate_video_unlocked_1, generate_video_unlocked_2, generate_video_v_11_multi, generate_video_v_14_multi, generate_video_v_3_multi, generate_video_v_4_multi, generate_video_v_6_multi, generate_video_v_7_multi, generate_video_v_7z_multi, generate_video_v_8_multi Additional inputs accepted by the selected tool.
Optional caller idempotency key; a retry with the same key returns the same operation.
Maximum string length:
240