Pular para o conteúdo
Toda a documentação

Referência

POST /v1/videos

Crie um clipe com som a partir de um prompt de texto, no formato da OpenAI: os métodos videos do SDK funcionam só trocando a URL base. Enfileire, consulte, baixe uma vez, e ele é apagado.

Verificado em 6 de novembro de 2026

Criar um clipe

import os
import time
from openai import OpenAI

client = OpenAI(
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
)

clip = client.videos.create(
    model="minimax-h3-max-turbo",
    prompt="Waves breaking on a rocky coast at dusk",
    seconds="5",
    size="1280x720",
)

while clip.status in ("queued", "in_progress"):
    time.sleep(5)
    clip = client.videos.retrieve(clip.id)

if clip.status == "completed":
    client.videos.download_content(clip.id).write_to_file("clip.mp4")

Modelos

ModeloBom para480p por segundo768p por segundo1080p por segundo
minimax-h3-max-turboRápido, com som. O que você deve começar.$0.045$0.07$0.14
minimax-h3-maxMais passos que o Turbo para um detalhe mais fino, com som.$0.09$0.14$0.28

Você paga pelos segundos que pede. Os dois modelos fazem clipes de 5 a 15 segundos, com som.

Requisição

CampoRecebeO que faz
modelObrigatórioUm dos ids de modelo acima.
promptObrigatório, até 10.000 caracteresO que filmar, enviado ao modelo como foi escrito. Acima do limite é recusado, nunca cortado.
seconds5 a 15A duração do clipe, como número ou texto. O padrão é 5. O 4 da OpenAI é recusado; 8 e 12 funcionam.
sizeWIDTHxHEIGHTEscolhe a resolução e a proporção mais próximas. 1280x720 vira 768p em 16:9, e é isso que você paga.
resolution480p, 768p ou 1080pDefine o preço e vence size. O padrão é 768p.
aspect_ratio16:9, 21:9, 4:3, 1:1, 3:4, 9:16Vence size. O padrão é 16:9.

Envie JSON ou o formulário multipart que os SDKs da OpenAI usam. Qualquer outro campo, como seed, é descartado e informado em x-nokeep-ignored. Um campo que carrega uma imagem ou clipe, como input_reference, é recusado com 400 unsupported_input: estes modelos trabalham só com texto. O SDK de Python da OpenAI mostra um aviso de descontinuação nos métodos videos, sobre o serviço de vídeo da própria OpenAI. Isso não afeta as chamadas para nós, e um verificador de tipos pode apontar o id do modelo.

As rotas do clipe

RotaO que faz
POST /v1/videosEnfileira um clipe e segura o preço.
GET /v1/videos/{id}Diz em que ponto ele está. Consulte a cada poucos segundos.
GET /v1/videos/{id}/contentO mp4. Funciona uma vez, depois o clipe é apagado do host do modelo. Se o download for interrompido, peça de novo.
DELETE /v1/videos/{id}Apaga um clipe pronto sem baixá-lo. Um clipe ainda renderizando responde 409 video_not_ready.
GET /v1/videosOs clipes recentes da conta.

O objeto do clipe

JSON
{
  "id": "video_8f3a…",
  "object": "video",
  "model": "minimax-h3-max-turbo",
  "status": "completed",
  "progress": 100,
  "created_at": 1793960000,
  "completed_at": 1793960030,
  "expires_at": 1794042800,
  "seconds": "5",
  "size": "1366x768",
  "resolution": "768p",
  "aspect_ratio": "16:9",
  "error": null,
  "downloaded": false,
  "expired": false,
  "usage": {
    "nokeep_credits": 350
  }
}
  • status é queued, in_progress, completed ou failed.
  • progress é 0 até o clipe ficar pronto, depois 100. O modelo não informa nada no meio.
  • size é calculado a partir da resolução e da proporção, então o arquivo pode diferir em alguns pixels.

O que você paga

  • O preço total do clipe fica reservado quando ele é enfileirado, contra seus créditos comprados e o teto diário da chave.
  • Ele é cobrado quando o clipe termina, baixando ou não.
  • Um clipe que falha não custa nada, e o status diz isso.

Onde o clipe fica

Um clipe pronto fica no host do modelo, em seu nível privado, por até 23 horas. Lá ele é apagado depois do único download, ou quando você o apaga. Nunca guardamos o arquivo, e depois desse prazo responde 410 video_gone. Nossa linha sobre o clipe guarda id, chave, modelo, duração, resolução, proporção, créditos e horários, nunca o prompt. Ela é apagada após 48 horas.

Conteúdo, limites e erros

Quatro limites rígidos continuam: conteúdo sexual envolvendo menores, conteúdo sexual de pessoas reais, dano em massa e alvo sendo uma pessoa real. Um prompt que cruza um deles recebe 422 hard_limit e não custa nada. O host de um modelo também pode recusar uma requisição, o que é 422 content_refused, também sem custo. Veja Limites rígidos.

Uma chave pode enfileirar 20 clipes por minuto, dentro de suas 120 requisições no total, e ter 10 renderizando ao mesmo tempo. Passando disso vem 429 rate_limited. A página de erros lista todos os códigos.

Para testar seu código sem gastar nada, envie sk-nokeep-test como chave. Ela roda todas as verificações, informa o clipe como pronto na hora com video_test, e o arquivo dele fica vazio.