Pular para conteúdo
GetAPI
Português (Brasil)
Menu

GetAPI.ONE

Gerar vídeo com a API de tarefas ONE

Envie tarefa de vídeo em formato OpenAI, preserve seu ID público, consulte a rota exata de estado ONE até resultado terminal e busque conteúdo só após concluir.

Confirmar protocolo antes de gastar

  • Escolha modelo atual que declare explicitamente o endpoint OpenAI de vídeo.
  • Revise preços ao vivo e campos aceitos; vídeo pode ser assíncrono e faturável.
  • Use instrução curta e de baixo risco no primeiro teste aceito.
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

Enviar, consultar e buscar

  1. Envie POST https://www.getapi.one/v1/videos e salve exatamente o ID retornado.
  2. Consulte GET https://www.getapi.one/v1/videos/{task_id} em intervalo fixo e com limite de verificações; não crie nova tarefa enquanto espera.
  3. Continue em queued ou in_progress; finalize com sucesso somente em completed.
  4. Pare e mostre erro em failed. Estados desconhecidos não são sucesso; preserve a resposta para diagnóstico.
  5. Após completed, busque GET https://www.getapi.one/v1/videos/{task_id}/content.
  6. Transfira blocos fixos com limite acumulado. O exemplo usa teto local de 512 MiB e remove o arquivo parcial em qualquer falha de leitura, validação, escrita ou cancelamento.
Enviar a tarefa
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
Consultar no máximo 30 vezes e buscar somente apó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

Implementar a máquina de estados

EstadoAção do cliente
queuedAguardar intervalo fixo e consultar o mesmo ID dentro do limite de verificações.
in_progressExibir progresso se fornecido e continuar consultando.
completedParar consultas e solicitar a rota de conteúdo.
failedParar consultas, registrar erros seguros e exigir repetição intencional.

Verificar o resultado esperado

  • A resposta fornece ID de tarefa e o cliente o armazena com durabilidade suficiente.
  • Toda consulta usa o mesmo ID e nunca cria trabalho duplicado.
  • O conteúdo baixado tem tipo de vídeo e abre somente após completed.

Recuperar sem duplicar tarefas

  • Após tempo limite de envio, não reenvie cegamente: veja se houve ID de tarefa ou registro no console.
  • Em 404 na consulta, confira ID público, rota exata singular/plural e mesma chave da conta.
  • Em failed, preserve modelo, resumo seguro, ID da tarefa e erro antes de mudar a entrada.

Proteger tarefas e resultados de mídia

  • Mantenha chave e consulta de tarefas no backend autenticado.
  • Valide instruções, uploads, duração, dimensões e quantidade conforme contrato antes de encaminhar.
  • Armazene resultados aprovados em local controlado; não presuma URL permanente ou segura para publicação.
  • Defina limite acumulado de download abaixo do orçamento de memória e armazenamento, transfira blocos fixos e limpe arquivos parciais quando não terminar.

Próximos passos