Resumo
A API de texto para vídeo Grok transforma prompts de texto em vídeos. Para utilizá-la, envie uma requisição POST /v1/videos/generations, receba um request_id imediatamente e consulte GET /v1/videos/{request_id} até que o status seja "done". O modelo utilizado é o grok-imagine-video, com preços a partir de US$0,05 por segundo em 480p. O SDK Python da xAI gerencia o polling automaticamente.
Experimente o Apidog hoje mesmo
Introdução
Em janeiro de 2026, a xAI gerou 1,2 bilhão de vídeos apenas no primeiro mês após o lançamento da API de texto para vídeo Grok (28/01/2026). O modelo liderou o ranking da Artificial Analysis nesse período, comprovando sua robustez em escala.
Este guia mostra como fazer sua primeira requisição, consultar o resultado, ajustar parâmetros, criar prompts melhores, usar imagens de referência, estender/editar vídeos e decidir quando usar texto para vídeo.
💡 Dica importante: A API é assíncrona. Seu frontend precisa lidar com polling para saber quando o vídeo está pronto. O Smart Mock da Apidog permite simular os endpoints de geração e consulta, acelerando o desenvolvimento do frontend antes do backend real.
O que é a API de texto para vídeo Grok?
A API de texto para vídeo Grok integra o conjunto de geração de mídia da xAI (https://api.x.ai). Basta enviar um prompt textual para o modelo grok-imagine-video — ele cria um clipe do zero, sem exigir imagem de origem.
Além disso, há um endpoint síncrono para geração de imagens (POST /v1/images/generations, modelo grok-imagine-image, US$0,02 por imagem), além de operações para estender ou editar vídeos.
No endpoint de texto para vídeo, só o texto importa: a cena, o movimento e o visual são definidos pelo prompt. Se você quiser animar uma imagem específica, consulte o guia da API de imagem para vídeo Grok.
Como funciona a geração de texto para vídeo (padrão assíncrono na prática)
A geração de vídeo é assíncrona devido ao tempo de processamento (segundos a minutos). O fluxo padrão:
- Envie um
POSTcom seu prompt. - Receba um
request_idimediatamente. - A geração ocorre nos servidores da xAI.
- Consulte
GET /v1/videos/{request_id}periodicamente. - Quando o status for
"done", a resposta traz a URL do vídeo.
Seu frontend precisa exibir um estado de carregamento até receber a URL final.
Pré-requisitos
Antes de codificar:
1. Conta na xAI: Cadastre-se em console.x.ai.
2. Chave de API: No console, crie sua chave em "API Keys" e salve-a com segurança. Ela será usada como Bearer Token em todas as requisições.
export XAI_API_KEY="sua_api_key_aqui"
(Opcional) Instale o SDK Python da xAI:
pip install xai-sdk
Sua primeira requisição de texto para vídeo
Endpoint: POST https://api.x.ai/v1/videos/generations. Campos obrigatórios: model e prompt.
Usando curl
curl -X POST https://api.x.ai/v1/videos/generations \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"prompt": "Um golden retriever correndo entre folhas de outono em câmera lenta, iluminação cinematográfica"
}'
Resposta imediata:
{
"request_id": "d97415a1-5796-b7ec-379f-4e6819e08fdf"
}
Usando Python (requests)
import requests
import os
API_KEY = os.environ["XAI_API_KEY"]
BASE_URL = "https://api.x.ai"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "grok-imagine-video",
"prompt": "Um golden retriever correndo entre folhas de outono em câmera lenta, iluminação cinematográfica"
}
response = requests.post(
f"{BASE_URL}/v1/videos/generations",
headers=headers,
json=payload
)
data = response.json()
request_id = data["request_id"]
print(f"Geração iniciada. ID da Requisição: {request_id}")
Consultando o resultado do vídeo
Após obter o request_id, faça polling em GET /v1/videos/{request_id} até status ser "done".
-
"processing": em geração -
"done": vídeo pronto (URL disponível) -
"failed": erro na geração
Exemplo de loop de polling em Python:
import requests
import time
import os
API_KEY = os.environ["XAI_API_KEY"]
BASE_URL = "https://api.x.ai"
headers = {
"Authorization": f"Bearer {API_KEY}"
}
def poll_video(request_id: str, interval: int = 5, max_attempts: int = 60) -> dict:
url = f"{BASE_URL}/v1/videos/{request_id}"
for attempt in range(max_attempts):
response = requests.get(url, headers=headers)
data = response.json()
status = data.get("status")
progress = data.get("progress", 0)
print(f"Tentativa {attempt + 1}: status={status}, progresso={progress}%")
if status == "done":
return data
elif status == "failed":
raise RuntimeError(f"Falha na geração do vídeo: {data}")
time.sleep(interval)
raise TimeoutError(f"Vídeo não pronto após {max_attempts} tentativas")
def generate_video(prompt: str) -> str:
response = requests.post(
f"{BASE_URL}/v1/videos/generations",
headers={**headers, "Content-Type": "application/json"},
json={"model": "grok-imagine-video", "prompt": prompt}
)
request_id = response.json()["request_id"]
print(f"ID da Requisição: {request_id}")
result = poll_video(request_id)
video_url = result["video"]["url"]
print(f"Vídeo pronto: {video_url}")
return video_url
video_url = generate_video(
"Um timelapse de um horizonte urbano ao pôr do sol fazendo a transição para a noite, vista aérea"
)
Exemplo de resposta quando o vídeo está pronto:
{
"status": "done",
"video": {
"url": "https://vidgen.x.ai/....mp4",
"duration": 8,
"respect_moderation": true
},
"progress": 100,
"usage": {
"cost_in_usd_ticks": 500000000
}
}
Usando o SDK Python da xAI
O SDK simplifica o processo — client.video.generate() já faz o polling e bloqueia até a conclusão.
from xai_sdk import Client
import os
client = Client(api_key=os.environ["XAI_API_KEY"])
result = client.video.generate(
model="grok-imagine-video",
prompt="Um golden retriever correndo entre folhas de outono em câmera lenta",
duration=8,
resolution="720p",
aspect_ratio="16:9"
)
print(f"URL do Vídeo: {result.video.url}")
print(f"Duração: {result.video.duration}s")
Use o SDK para integração rápida. Para maior controle (intervalo de polling, lógica de retentativa), prefira requests diretas.
Escrevendo prompts eficazes para vídeo
Prompts detalhados geram melhores resultados.
Descrição da cena
Seja específico. Exemplo:
"Uma caneca de café de cerâmica branca em uma mesa de madeira ao lado de uma janela molhada pela chuva"
Movimento
Explique o que se move e como:
"A câmera orbita lentamente a caneca enquanto o vapor sobe em espiral"
Estilo de câmera
Comandos como "close-up", "plano de acompanhamento", "vista aérea de drone", "câmera na mão", "dolly zoom" funcionam bem.
Iluminação e humor
Combine clima e iluminação:
"manhã enevoada, atmosfera melancólica"
Referências de estilo
Cite estilos: "cinemático", "anime", "stop-motion", "documentário", etc.
Estrutura de prompt eficiente
Exemplo completo:
Um astronauta solitário flutua pela Estação Espacial Internacional,
com o cabo flutuando atrás dele. A câmera acompanha lentamente
ao lado, mostrando a Terra abaixo. Cinemático, qualidade IMAX,
luz quente do nascer do sol refletindo no visor.
Controlando resolução, duração e proporção
Personalize os parâmetros de saída:
Duração
"duration": 10
1 a 15 segundos (padrão: 6s). Quanto maior, maior o custo.
Resolução
"resolution": "720p"
Opções: "480p" (padrão) e "720p". Use 480p para testes.
Proporção de tela
"aspect_ratio": "9:16"
| Proporção | Melhor uso |
|---|---|
16:9 |
Desktop, YouTube, apresentações |
9:16 |
TikTok, Reels, mobile |
1:1 |
Instagram Feed, cartões sociais |
4:3 |
Vídeo clássico, apresentações |
3:4 |
Conteúdo mobile vertical |
3:2 |
Foto padrão |
2:3 |
Fotografia em retrato |
Exemplo completo
curl -X POST https://api.x.ai/v1/videos/generations \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"prompt": "Uma cidade costeira ao amanhecer, ondas quebrando suavemente em uma costa rochosa",
"duration": 10,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
Usando imagens de referência para guiar o estilo
O parâmetro reference_images recebe até 7 URLs de imagem. Elas influenciam a estética do vídeo.
{
"model": "grok-imagine-video",
"prompt": "Uma cidade costeira ao amanhecer, ondas quebrando suavemente em uma costa rochosa",
"reference_images": [
{"url": "https://example.com/my-style-reference.jpg"},
{"url": "https://example.com/color-palette-reference.jpg"}
]
}
Para melhores resultados, use imagens com estética visual coesa.
Diferencie:
- Imagens de referência: influenciam estilo (cor, textura).
- Imagem para vídeo: anima uma imagem de origem, que vira o primeiro frame.
Estendendo e editando vídeos gerados
Dois endpoints extras:
Estender um vídeo
POST /v1/videos/extensions — passar o request_id do vídeo original + novo prompt para gerar sequência adicional.
Editar um vídeo
POST /v1/videos/edits — modificar um vídeo existente via prompt textual (alterar estilo, efeitos, etc).
Ambos seguem o mesmo padrão assíncrono: retornam request_id e polling para resultado.
Lendo o custo da resposta da API
No resultado da consulta:
"usage": {
"cost_in_usd_ticks": 500000000
}
Converta para dólares dividindo por 10.000.000:
cost_in_usd = result["usage"]["cost_in_usd_ticks"] / 10_000_000
print(f"Custo: ${cost_in_usd:.4f}")
# Saída: Custo: $0.0500
Referência de Preços
| Resolução | Preço por segundo | Clipe de 10s |
|---|---|---|
| 480p | $0.05 | $0.50 |
| 720p | $0.07 | $0.70 |
Monitore cost_in_usd_ticks para construir dashboards de uso sem precisar das APIs de faturamento.
Como testar sua API de vídeo Grok com Apidog
O padrão assíncrono exige que o frontend trate três estados: carregando, sucesso e erro. Testar tudo isso com a API real é demorado e caro. O recurso Smart Mock do Apidog resolve esse problema.
Caso de uso 1: Smart Mock para frontend
-
Simule o endpoint de geração:
Crie
POST /v1/videos/generationse defina o schema na Apidog, com camporequest_id. O Smart Mock retorna um UUID fake automaticamente.
Exemplo de resposta:
{
"request_id": "d97415a1-5796-b7ec-379f-4e6819e08fdf"
}
-
Simule o endpoint de consulta:
Crie
GET /v1/videos/{request_id}com todos os campos (status,video.url, etc). Configure mocks customizados para"status": "done"e uma URL de vídeo fake.
Exemplo de resposta:
{
"status": "done",
"video": {
"url": "https://vidgen.x.ai/mock-video-12345.mp4",
"duration": 8,
"respect_moderation": true
},
"progress": 100,
"usage": {
"cost_in_usd_ticks": 400000000
}
}
Frontenders podem testar todos os estados sem consumir créditos reais.
Caso de uso 2: Cenários de Teste para o loop de polling
Adicione requisição de geração:
POST /v1/videos/generations, extraiarequest_idusando JSONPath.Adicione loop de consulta:
GET /v1/videos/{{videoRequestId}}dentro de loop com condição:response.body.status == "done". Adicione espera de 5s entre as requisições.Afirme o resultado:
Após o loop, afirme que$.video.urlnão está vazio.
Automatize esses cenários para garantir confiabilidade contínua na sua integração.
Texto para vídeo vs imagem para vídeo: quando usar cada um
Ambos usam grok-imagine-video, mas para usos distintos.
Use texto para vídeo quando:
- Precisa de conteúdo 100% original a partir de um conceito/roteiro
- Quer controle criativo total do modelo
- Usuários digitarão prompts
- Não tem imagem de origem
Use imagem para vídeo quando:
- Quer animar uma foto, ilustração ou arte de marca
- Precisa manter detalhes visuais exatos
- Vai animar uma sequência de imagens relacionadas
Texto para vídeo cria do zero; imagem para vídeo parte de uma imagem. Para detalhes, veja o guia da API de imagem para vídeo Grok.
Para apps híbridos: se usuário faz upload de imagem, use POST /v1/images/generations. Se só texto, use POST /v1/videos/generations.
Erros comuns e como corrigir
401 Não Autorizado:
- Verifique se o header Authorization está correto:
Bearer SUA_CHAVE_XAI - Confirme se a chave está ativa
429 Muitas Requisições:
- Respeite o limite: 60 por minuto, 1 por segundo
- Use delays de 5s no polling
status: "failed":
- Prompt rejeitado pela moderação. Veja se
respect_moderationétruee ajuste o texto.
URL retorna 404:
- URLs de vídeo expiram. Baixe o arquivo assim que receber a URL.
Vídeo vazio ou travado:
- Prompts vagos geram vídeos sem movimento. Sempre inclua instruções de movimento.
Polling lento:
- 720p e durações maiores demoram mais. Para desenvolvimento, use
"resolution": "480p"e clipes curtos.
Conclusão
A API de texto para vídeo Grok permite ir do texto ao vídeo de forma simples: envie o prompt, obtenha o request_id, faça polling até concluir e recupere o MP4. O fluxo assíncrono é o ponto central do processo. Uma vez automatizado o polling, ajustar os demais parâmetros é simples.
Para produção, monitore custos via cost_in_usd_ticks em cada resposta. Simule endpoints com Apidog para acelerar o desenvolvimento frontend e use Cenários de Teste para garantir confiabilidade.
Experimente o Apidog hoje mesmo para configurar mocks e cenários de teste para a API de vídeo Grok.
FAQ
Qual nome de modelo devo usar para geração de texto para vídeo?
Use grok-imagine-video no campo model da requisição POST para /v1/videos/generations.
Quanto tempo leva para gerar um vídeo?
Depende da duração e resolução. Em 480p, clipes curtos podem ficar prontos em menos de 30s. Em 720p e clipes longos, pode levar minutos. Faça polling a cada 5-10s.
Posso gerar vídeos com mais de 15 segundos?
Não em uma única requisição (duration máxima: 15s). Para vídeos maiores, gere um clipe e use POST /v1/videos/extensions.
Como baixar o vídeo gerado?
Use a URL retornada em result.video.url e baixe o MP4 imediatamente. A URL é temporária.
O que acontece se meu prompt violar moderação?
O status será "failed". Veja o campo respect_moderation. Ajuste o prompt e tente novamente.
Existe nível gratuito?
A xAI cobra por segundo gerado. Não há nível gratuito específico para vídeo, mas consulte console.x.ai para ofertas de crédito para novas contas.
Como reference_images diferem de imagem de origem?
reference_images apenas orientam o estilo; imagem de origem é o primeiro frame do vídeo.
Como testar o loop de polling sem gastar créditos?
Use o Smart Mock da Apidog para simular endpoints de geração e consulta, com respostas para "processing" e "done". Assim, o frontend funciona sem consumir a API real.

Top comments (0)