Aller au contenu
GetAPI
Français
Menu

GetAPI.ONE

Générer une vidéo avec l’API de tâches ONE

Envoyez une tâche vidéo au format OpenAI, conservez son identifiant public, interrogez la route d’état ONE exacte jusqu’à un état terminal et ne récupérez le contenu qu’après achèvement.

Confirmer le protocole avant toute dépense

  • Choisissez un modèle actuel du catalogue qui déclare explicitement le point de terminaison vidéo OpenAI.
  • Consultez les tarifs en direct et les champs d’entrée pris en charge par le modèle ; les travaux vidéo peuvent être asynchrones et facturables.
  • Utilisez une invite courte et à faible risque pour le premier test accepté.
text
POST https://www.getapi.one/v1/videos
GET https://www.getapi.one/v1/videos/{task_id}
GET https://www.getapi.one/v1/videos/{task_id}/content

Envoyer, interroger et récupérer

  1. Envoyer POST https://www.getapi.one/v1/videos et enregistrer exactement l’identifiant de tâche renvoyé.
  2. Interroger GET https://www.getapi.one/v1/videos/{task_id} à intervalle fixe avec un nombre limité de contrôles ; ne créez pas une nouvelle tâche pendant l’attente.
  3. Poursuivre pour queued ou in_progress ; ne terminer avec succès que pour completed.
  4. Arrêter et présenter l’erreur pour failed. Traiter les états inconnus comme des échecs et conserver la réponse pour diagnostic.
  5. Après completed, récupérer GET https://www.getapi.one/v1/videos/{task_id}/content.
  6. Diffuser le contenu par blocs de taille fixe sous une limite cumulative. L’exemple utilise un plafond local de 512 MiB et supprime son fichier partiel en cas d’échec de lecture, validation, écriture ou annulation.
Envoyer la tâche
curl --fail-with-body https://www.getapi.one/v1/videos \
  -H "Authorization: Bearer $GETAPI_ONE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<OPENAI_VIDEO_MODEL_ID_FROM_CURRENT_CATALOG>",
    "prompt": "A five-second locked-camera product turntable on a neutral background"
  }' > video-submit.json
Interroger au maximum 30 fois, puis récupérer uniquement après completed
import json
import os
import time
from pathlib import Path
from urllib.parse import quote
from urllib.request import Request, urlopen

base_url = "https://www.getapi.one"
api_key = os.environ["GETAPI_ONE_API_KEY"]
submitted = json.loads(Path("video-submit.json").read_text(encoding="utf-8"))
task_id = submitted.get("id") or submitted.get("task_id")
if not task_id:
    raise ValueError("Submit response did not contain id or task_id")

safe_id = quote(task_id, safe="")
headers = {"Authorization": f"Bearer {api_key}"}
for attempt in range(30):
    request = Request(f"{base_url}/v1/videos/{safe_id}", headers=headers)
    with urlopen(request, timeout=30) as response:
        task = json.load(response)
    status = task.get("status")
    if status == "completed":
        break
    if status == "failed":
        raise RuntimeError(f"video task failed: {task.get('error')}")
    if status not in {"queued", "in_progress"}:
        raise RuntimeError(f"unknown non-success status: {status}")
    if attempt == 29:
        raise TimeoutError("video was not complete after 30 status checks")
    time.sleep(10)

content_request = Request(
    f"{base_url}/v1/videos/{safe_id}/content",
    headers=headers,
)
MAX_VIDEO_BYTES = 512 * 1024 * 1024
CHUNK_BYTES = 1024 * 1024
output_path = Path("result.mp4")
created_output = False
with urlopen(content_request, timeout=60) as response:
    content_type = response.headers.get_content_type()
    if not content_type.startswith("video/"):
        raise ValueError(f"unexpected content type: {content_type}")
    try:
        output = output_path.open("xb")
        created_output = True
        with output:
            total_bytes = 0
            while chunk := response.read(CHUNK_BYTES):
                total_bytes += len(chunk)
                if total_bytes > MAX_VIDEO_BYTES:
                    raise ValueError("video exceeds the local 512 MiB limit")
                output.write(chunk)
    except BaseException:
        if created_output:
            output_path.unlink(missing_ok=True)
        raise

Implémenter la machine à états

ÉtatAction du client
queuedAttendre l’intervalle fixe, puis interroger le même identifiant de tâche dans la limite du nombre de contrôles.
in_progressAfficher la progression si elle est fournie et poursuivre les interrogations.
completedArrêter l’interrogation et demander la route de contenu.
failedArrêter l’interrogation, enregistrer les détails d’erreur sûrs et exiger une nouvelle tentative intentionnelle.

Vérifier le résultat attendu

  • La réponse d’envoi fournit un identifiant de tâche et le client le conserve assez durablement pour la procédure.
  • Chaque requête d’état utilise le même identifiant et ne crée jamais de travail en double.
  • Le contenu téléchargé présente un type vidéo et ne s’ouvre qu’après l’état completed.

Récupérer sans dupliquer les tâches

  • Si l’envoi expire, ne le répétez pas aveuglément : vérifiez si un identifiant de tâche ou un enregistrement de console a été créé.
  • En cas de 404 pendant l’interrogation, vérifiez l’identifiant public de tâche, la route exacte au singulier ou au pluriel et la même clé de compte.
  • En cas d’échec, conservez le modèle, un résumé sûr de la requête, l’identifiant de tâche et les détails de l’erreur avant de modifier les entrées.

Protéger les tâches et résultats multimédias

  • Conservez la clé et la recherche de tâche dans votre backend authentifié.
  • Validez les invites, téléversements, durées, dimensions et nombres selon le contrat du modèle sélectionné avant de les transmettre.
  • Stockez les résultats approuvés dans un stockage contrôlé ; ne supposez pas qu’une URL de contenu est permanente ou sûre pour le public.
  • Définissez une limite cumulative de téléchargement inférieure à votre budget mémoire et stockage, diffusez des blocs de taille fixe et supprimez les artefacts partiels si le téléchargement ne se termine pas.

Étapes suivantes