- Asynchronous processing mode, returns task ID for subsequent queries
- Generated video links are valid for 24 hours, please save them promptly
Model name compatibility note: This endpoint also accepts the aliases veo3.1-fast-ext (equivalent to veo3.1-fast) and veo3.1-quality-ext (equivalent to veo3.1-quality). Each alias is interchangeable with its model and produces identical results.
Request example
# model can be "veo3.1-fast", or the compatible alias "veo3.1-fast-ext"
curl --request POST \
--url https://api.openveer.com/v1/videos/{task_id}/remix \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "veo3.1-fast",
"prompt": "The cat continues running on the grass, butterflies fly into the distance",
"raw": false,
"aspect_ratio": "16:9",
"resolution": "720p"
}'import requests
url = "https://api.openveer.com/v1/videos/{task_id}/remix"
payload = {
"model": "veo3.1-fast",
"prompt": "The cat continues running on the grass, butterflies fly into the distance",
"raw": False,
"aspect_ratio": "16:9",
"resolution": "720p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())const url = "https://api.openveer.com/v1/videos/{task_id}/remix";
const payload = {
model: "veo3.1-fast",
prompt: "The cat continues running on the grass, butterflies fly into the distance",
raw: false,
aspect_ratio: "16:9",
resolution: "720p"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.openveer.com/v1/videos/{task_id}/remix"
payload := map[string]interface{}{
"model": "veo3.1-fast",
"prompt": "The cat continues running on the grass, butterflies fly into the distance",
"raw": false,
"aspect_ratio": "16:9",
"resolution": "720p",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.openveer.com/v1/videos/{task_id}/remix";
String payload = """
{
"model": "veo3.1-fast",
"prompt": "The cat continues running on the grass, butterflies fly into the distance",
"raw": false,
"aspect_ratio": "16:9",
"resolution": "720p"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}<?php
$url = "https://api.openveer.com/v1/videos/{task_id}/remix";
$payload = [
"model" => "veo3.1-fast",
"prompt" => "The cat continues running on the grass, butterflies fly into the distance",
"raw" => false,
"aspect_ratio" => "16:9",
"resolution" => "720p"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.openveer.com/v1/videos/{task_id}/remix")
payload = {
model: "veo3.1-fast",
prompt: "The cat continues running on the grass, butterflies fly into the distance",
raw: false,
aspect_ratio: "16:9",
resolution: "720p"
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.bodyimport Foundation
let url = URL(string: "https://api.openveer.com/v1/videos/{task_id}/remix")!
let payload: [String: Any] = [
"model": "veo3.1-fast",
"prompt": "The cat continues running on the grass, butterflies fly into the distance",
"raw": false,
"aspect_ratio": "16:9",
"resolution": "720p"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.openveer.com/v1/videos/{task_id}/remix";
var payload = @"{
""model"": ""veo3.1-fast"",
""prompt"": ""The cat continues running on the grass, butterflies fly into the distance"",
""raw"": false,
""aspect_ratio"": ""16:9"",
""resolution"": ""720p""
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.openveer.com/v1/videos/{task_id}/remix";
const char *payload = "{"
"\"model\":\"veo3.1-fast\","
"\"prompt\":\"The cat continues running on the grass, butterflies fly into the distance\","
"\"raw\":false,"
"\"aspect_ratio\":\"16:9\","
"\"resolution\":\"720p\""
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.openveer.com/v1/videos/{task_id}/remix"];
NSDictionary *payload = @{
@"model": @"veo3.1-fast",
@"prompt": @"The cat continues running on the grass, butterflies fly into the distance",
@"raw": @NO,
@"aspect_ratio": @"16:9",
@"resolution": @"720p"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.openveer.com/v1/videos/{task_id}/remix"
let payload = {|{
"model": "veo3.1-fast",
"prompt": "The cat continues running on the grass, butterflies fly into the distance",
"raw": false,
"aspect_ratio": "16:9",
"resolution": "720p"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run responseimport 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.openveer.com/v1/videos/{task_id}/remix');
final payload = {
'model': 'veo3.1-fast',
'prompt': 'The cat continues running on the grass, butterflies fly into the distance',
'raw': false,
'aspect_ratio': '16:9',
'resolution': '720p'
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}library(httr)
library(jsonlite)
url <- "https://api.openveer.com/v1/videos/{task_id}/remix"
payload <- list(
model = "veo3.1-fast",
prompt = "The cat continues running on the grass, butterflies fly into the distance",
raw = FALSE,
aspect_ratio = "16:9",
resolution = "720p"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))Response example
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JQXYZ9999NEWEXTENDID"
}
]
}{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}{
"error": {
"code": 404,
"message": "Video not found",
"type": "not_found_error"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": 500,
"message": "Internal server error. Please try again later",
"type": "server_error"
}
}{
"error": {
"code": 502,
"message": "Bad gateway. The server is temporarily unavailable",
"type": "bad_gateway"
}
}Path Parameters
task_id stringOriginal video task ID
This is the task_id returned from the video generation API. The original video task status must be success
Authorization
Authorization stringAll API endpoints require Bearer Token authentication
Get your API Key:
Visit the API Key Management Page to get your API Key
Add to the request header:
Authorization: Bearer YOUR_API_KEYRequest Parameters
model stringVideo model name, must match the model used for the original video
Supported models:
veo3.1-fast- Fast version (compatible aliasveo3.1-fast-ext)veo3.1-quality- High quality version (compatible aliasveo3.1-quality-ext)
Example: "veo3.1-fast"
For backward compatibility, the aliases veo3.1-fast-ext (for veo3.1-fast) and veo3.1-quality-ext (for veo3.1-quality) remain usable.
nsfw_check booleanWhether to run content moderation before submitting the video task.
true: useomni-moderation-latestto review prompts and input imagesfalseor omitted: do not send a moderation request, adding no moderation cost or latency (default)
prompt stringContinuation prompt describing the content for the extended portion
raw booleanWhether to return only the extended portion of the video
true- Only returns the extended video
Default: false
aspect_ratio stringAspect ratio for the extended video
Supported values:
16:99:16
resolution stringVideo resolution
Supported values:
720p(default)1080p4k
Important Notes
Model must match: The model used for extension must be the same as the one used to generate the original video. Videos generated with veo3.1-fast must also use veo3.1-fast for extension.
Only completed videos supported: The original video task status must be success.
task_id in URL: This is the task_id returned from the first step of video generation (not the upstream ID).
Response
code integerResponse status code
data object[]task_id stringNew task ID for querying the extended video status
status stringTask status
Possible values:
* submitted - Submitted
This documentation is built and hosted on Mintlify, a developer documentation platform.