curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "gemini-omni-flash-preview",
prompt: "a red apple on a wooden table, short cinematic clip",
aspect_ratio: "16:9"
};
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.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9",
}
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))
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KS1H7ZYSJWH1N779S2FSHTKA"
}
]
}
{
"error": {
"code": 400,
"message": "Paramètres de requête invalides",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Échec de l'authentification, veuillez vérifier votre clé API",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant, veuillez recharger et réessayer",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Requêtes trop fréquentes, veuillez réessayer plus tard",
"type": "rate_limit_error"
}
}
Gemini Omni Flash
Génération vidéo Gemini Omni Flash
- Modèle officiel Google Gemini Omni Flash, modèle de génération vidéo multimodal tout-en-un
- Prend en charge le Text-to-Video, l’Image-to-Video et la Video-to-Video (édition), avec entrées mixtes texte + image + vidéo
- Sortie 720p / 24fps, 3–10 secondes, avec audio ; prend en charge l’édition conversationnelle multi-tours
- API de tâche asynchrone. Après soumission, interrogez le résultat de génération via l’identifiant de tâche
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "gemini-omni-flash-preview",
prompt: "a red apple on a wooden table, short cinematic clip",
aspect_ratio: "16:9"
};
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.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9",
}
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))
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KS1H7ZYSJWH1N779S2FSHTKA"
}
]
}
{
"error": {
"code": 400,
"message": "Paramètres de requête invalides",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Échec de l'authentification, veuillez vérifier votre clé API",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant, veuillez recharger et réessayer",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Requêtes trop fréquentes, veuillez réessayer plus tard",
"type": "rate_limit_error"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "gemini-omni-flash-preview",
prompt: "a red apple on a wooden table, short cinematic clip",
aspect_ratio: "16:9"
};
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.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "gemini-omni-flash-preview",
"prompt": "a red apple on a wooden table, short cinematic clip",
"aspect_ratio": "16:9",
}
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))
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KS1H7ZYSJWH1N779S2FSHTKA"
}
]
}
{
"error": {
"code": 400,
"message": "Paramètres de requête invalides",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Échec de l'authentification, veuillez vérifier votre clé API",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant, veuillez recharger et réessayer",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Requêtes trop fréquentes, veuillez réessayer plus tard",
"type": "rate_limit_error"
}
}
Authentification
string
requis
Toutes les requêtes nécessitent une authentification par Bearer Token.Obtenir une clé API :Rendez-vous sur la page de gestion des clés API pour obtenir votre clé API.Ajoutez l’en-tête suivant lors de l’envoi des requêtes :
Authorization: Bearer YOUR_API_KEY
Paramètres de la requête
string
requis
Nom du modèle de génération vidéo, fixé à
gemini-omni-flash-preview.boolean
défaut:"false"
Indique s’il faut modérer le contenu avant d’envoyer la tâche vidéo.
true: vérifier les prompts et les images d’entrée avecomni-moderation-latestfalseou omis : ne pas envoyer de requête de modération, sans coût ni latence de modération supplémentaires (par défaut)
string
requis
Instruction textuelle. Pour le Text-to-Video, il s’agit de la description de la scène ; pour l’Image/Video-to-Video, il s’agit de l’instruction de mouvement / style / édition.
prompt et les éléments de référence (image_urls / video_urls) : fournissez au moins l’un des deux.array<string>
Images de référence, 16 au maximum. Chaque élément est une URL
http(s)://.Prend en charge JPEG / PNG. Pour plusieurs sujets (par exemple « chat + pelote de laine »), vous pouvez transmettre plusieurs images et décrire dans le prompt la manière dont elles interagissent.array<string>
Vidéo de référence / à éditer, 1 au maximum (les références multi-vidéos ne sont pas prises en charge). Il peut s’agir d’un lien direct
http(s):// ou de data:video/....- La vidéo de référence dure de 1 à 24 secondes ; recommandation officielle : ≤3 secondes.
video_urlsetextend_from_task_idsont mutuellement exclusifs ; n’en fournissez qu’un seul, pas les deux à la fois.
string
défaut:"16:9"
Format d’image de la vidéo, qui contrôle réellement l’orientation de la sortie.Prend uniquement en charge :
Lorsque
video_urls est fourni, le paramètre aspect_ratio n’est pas pris en compte.16:9- paysage (par défaut)9:16- portrait
16:9.string
défaut:"720p"
Résolution de la vidéo. Actuellement, seul
720p est pris en charge.string
Identifiant de la tâche précédente : indiquez le **
task_id** de la tâche de génération précédente.extend_from_task_id et video_urls sont mutuellement exclusifs ; n’en fournissez qu’un seul, pas les deux à la fois.Réponse
integer
Code de statut de la réponse. En cas de succès, il vaut
200.array
Interroger le résultat de la tâche
La génération vidéo est une tâche asynchrone. Après la soumission, untask_id est renvoyé ; utilisez le point de terminaison Obtenir le statut de la tâche pour interroger la progression et le résultat de la génération.
Exemple de résultat réussi
{
"code": 200,
"data": {
"id": "task_01KS1H7ZYSJWH1N779S2FSHTKA",
"status": "completed",
"progress": 100,
"created": 1779246294,
"completed": 1779246334,
"actual_time": 40,
"estimated_time": 60,
"cost": 1.0,
"credits_cost": 10,
"result": {
"videos": [
{
"url": ["https://cdn.example.com/gemini_omni_xxx.mp4"],
"expires_at": 1779332760
}
]
}
}
}
Cas d’usage
Scénario 1 : Text-to-Video
{
"model": "gemini-omni-flash-preview",
"prompt": "a blue butterfly landing on a flower, macro, soft light",
"aspect_ratio": "9:16"
}
Scénario 2 : Image-to-Video
{
"model": "gemini-omni-flash-preview",
"prompt": "turn this drawing into realistic footage, use it only as a motion guide",
"image_urls": ["https://example.com/sketch.jpg"]
}
Scénario 3 : Video-to-Video
{
"model": "gemini-omni-flash-preview",
"prompt": "when the person touches the mirror, make it ripple like liquid",
"video_urls": ["https://example.com/clip.mp4"]
}