Salta al contenuto
GetAPI
Italiano
Menu

GetAPI.ONE

Generare video con API attività ONE

Inviare attività video in formato OpenAI, conservare ID pubblico, interrogare la rotta ONE esatta fino a esito terminale e recuperare contenuti solo dopo completamento.

Confermare protocollo prima di spendere

  • Scegliere modello attuale che dichiari endpoint video OpenAI.
  • Rivedere prezzi e campi supportati; video può essere asincrono e fatturabile.
  • Usare istruzione breve e a basso rischio nel primo test accettato.
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

Inviare, interrogare e recuperare

  1. Inviare POST https://www.getapi.one/v1/videos e conservare ID esatto.
  2. Interrogare GET https://www.getapi.one/v1/videos/{task_id} a intervalli fissi e con controlli limitati; non creare attività durante l'attesa.
  3. Continuare con queued o in_progress; successo solo con completed.
  4. Fermarsi e mostrare errore per failed. Stati ignoti non sono successo: conservare risposta diagnostica.
  5. Dopo completed, recuperare GET https://www.getapi.one/v1/videos/{task_id}/content.
  6. Trasferire blocchi fissi con limite totale. L'esempio usa tetto locale 512 MiB e rimuove file parziale per errori di lettura, validazione, scrittura o cancellazione.
Inviare l'attività
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
Interrogare al massimo 30 volte, poi recuperare solo dopo 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

Implementare macchina a stati

StatoAzione client
queuedAttendere intervallo fisso e consultare stesso ID entro il limite.
in_progressMostrare progresso se fornito e continuare polling.
completedFermare polling e richiedere contenuto.
failedFermare polling, registrare errore sicuro e richiedere ripetizione intenzionale.

Verificare il risultato previsto

  • La risposta fornisce ID che il client conserva con persistenza sufficiente.
  • Ogni consultazione usa lo stesso ID senza duplicare lavoro.
  • Il contenuto scaricato ha tipo video e si apre solo dopo completed.

Recuperare senza duplicare attività

  • Dopo timeout d'invio non reinviare alla cieca: cercare ID attività o registro console.
  • In 404 durante polling verificare ID pubblico, rotta singolare/plurale esatta e stessa chiave account.
  • In failed conservare modello, riepilogo sicuro, ID ed errore prima di cambiare input.

Proteggere attività e risultati multimediali

  • Tenere chiave e consultazione attività nel backend autenticato.
  • Validare istruzioni, upload, durata, dimensioni e quantità rispetto al contratto prima dell'inoltro.
  • Conservare risultati approvati in storage controllato; non presumere URL permanenti o sicure da pubblicare.
  • Imporre limite totale download sotto memoria/storage disponibili, usare blocchi fissi e pulire file parziali se incompleto.

Passaggi successivi