Em Resumo
A API Grok de imagem para vídeo utiliza o modelo grok-imagine-video para animar uma imagem estática em um clipe de vídeo. Basta enviar um POST com a URL da sua imagem, um prompt e configurações para https://api.x.ai/v1/videos/generations. O retorno inclui um request_id para você consultar (polling) via GET /v1/videos/{request_id} até que o status seja "done". A geração leva de 1 a 15 segundos de vídeo, com preço a partir de US$ 0,05/seg para 480p.
Introdução
Em 28 de janeiro de 2026, a xAI lançou o modelo grok-imagine-video para acesso público via API. No primeiro mês, o modelo gerou 1,2 bilhão de vídeos, liderando o ranking de texto para vídeo da Artificial Analysis. Com a funcionalidade de imagem para vídeo, você envia uma foto e um prompt descritivo via API, e recebe um vídeo animado pronto para download em MP4.
O fluxo assíncrono, onde você envia a tarefa e faz polling até a conclusão, exige testes reais. A integração só está finalizada quando o seu loop de polling trata corretamente os estados "processing", "done" e "failed".
Os Cenários de Teste do Apidog resolvem esse fluxo: encadeie o POST para /v1/videos/generations, extraia o request_id, faça polling até status == "done", e afirme que a URL do vídeo foi retornada. Siga o passo a passo de teste mais abaixo neste guia.
O que é a API Grok de imagem para vídeo?
A API Grok de imagem para vídeo é parte do produto de geração de vídeo da xAI, operando com o modelo grok-imagine-video. Ela recebe uma imagem que se torna o quadro inicial do vídeo. O modelo analisa a imagem e o prompt de texto, gerando movimento natural na cena.
Endpoint:
POST https://api.x.ai/v1/videos/generations
Autenticação:
Authorization: Bearer SUA_CHAVE_API_XAI
Sua chave está disponível no console da xAI. O mesmo endpoint suporta texto para vídeo (sem o parâmetro image), extensão e edição de vídeo.
Como funciona o processo de imagem para vídeo
O parâmetro image define o primeiro quadro do vídeo. O modelo parte dessa imagem (não a substitui) e prevê como ela se moveria conforme o prompt.
Exemplo:
Imagem: lago ao nascer do sol
Prompt: "ondulações suaves se espalham pela água enquanto a névoa matinal se move"
O primeiro quadro será a foto enviada; os quadros seguintes trazem a animação conforme o prompt.
Use imagem para vídeo quando:
- Precisa animar fotos reais de produtos, paisagens ou retratos.
- Quer manter identidade visual no quadro inicial.
- Deseja movimento realista a partir de uma cena específica.
Prefira texto para vídeo quando:
- Não tem imagem de referência.
- Quer liberdade total na composição.
- Precisa de iteração rápida.
Pré-requisitos
Antes de começar:
- Conta xAI no console.x.ai
- Chave de API do console xAI (mantenha em variável de ambiente)
- Python 3.8+ ou Node.js 18+ (exemplos para ambos)
- Imagem publicamente acessível (URL) ou codificada em base64 (data URI)
Defina a variável de ambiente:
export XAI_API_KEY="sua_chave_aqui"
Instale o SDK Python:
pip install xai-sdk
Para HTTP direto, use apenas requests (Python) ou fetch (Node.js).
Fazendo a primeira requisição de imagem para vídeo
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": "Gentle waves move across the surface, morning mist rises slowly",
"image": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
},
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
Resposta esperada:
{
"request_id": "d97415a1-5796-b7ec-379f-4e6819e08fdf"
}
A geração é assíncrona. Use o request_id para polling.
Usando Python (requisições diretas)
import os
import requests
api_key = os.environ["XAI_API_KEY"]
payload = {
"model": "grok-imagine-video",
"prompt": "Gentle waves move across the surface, morning mist rises slowly",
"image": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
},
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(
"https://api.x.ai/v1/videos/generations",
json=payload,
headers=headers
)
data = response.json()
request_id = data["request_id"]
print(f"Job started: {request_id}")
Usando uma imagem base64
Se a imagem não estiver pública:
import base64
with open("my_image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
payload["image"] = {
"url": f"data:image/jpeg;base64,{encoded}"
}
Consultando o resultado (Polling)
A geração é assíncrona. Faça polling do status:
GET https://api.x.ai/v1/videos/{request_id}
Status possíveis:
| Status | Significado |
|---|---|
"processing" |
Vídeo sendo gerado |
"done" |
Vídeo pronto, URL disponível |
"failed" |
Erro na geração |
Exemplo de resposta:
{
"status": "done",
"video": {
"url": "https://vidgen.x.ai/....mp4",
"duration": 6
},
"progress": 100
}
Loop de polling em Python
import time
def poll_video(request_id: str, api_key: str, interval: int = 5) -> dict:
url = f"https://api.x.ai/v1/videos/{request_id}"
headers = {"Authorization": f"Bearer {api_key}"}
while True:
response = requests.get(url, headers=headers)
data = response.json()
status = data.get("status")
print(f"Status: {status} | Progress: {data.get('progress', 0)}%")
if status == "done":
return data["video"]
elif status == "failed":
raise RuntimeError(f"Video generation failed for {request_id}")
time.sleep(interval)
# Uso
video = poll_video(request_id, api_key)
print(f"Video URL: {video['url']}")
print(f"Duration: {video['duration']}s")
Dica: Use intervalo de polling ≥5s. A API limita a 60 requisições/minuto.
Usando o SDK Python da xAI
O xai-sdk faz o polling automaticamente:
from xai_sdk import Client
import os
client = Client(api_key=os.environ["XAI_API_KEY"])
video = client.video.generate(
model="grok-imagine-video",
prompt="Gentle waves move across the surface, morning mist rises slowly",
image={"url": "https://example.com/landscape.jpg"},
duration=6,
resolution="720p",
aspect_ratio="16:9"
)
print(f"Video URL: {video.url}")
print(f"Duration: {video.duration}s")
Prefira SDK para código limpo. Use HTTP direto para controle total de polling.
Controlando resolução, duração e proporção da tela
Duração
"duration": 10
Aceita 1 a 15 segundos. Quanto maior, maior o custo.
Resolução
| Valor | Descrição |
|---|---|
"480p" |
Padrão. Mais barato, mais rápido |
"720p" |
Alta qualidade. US$ 0,07/seg |
"resolution": "720p"
Proporção da tela (aspect_ratio)
| Valor | Uso |
|---|---|
| "16:9" | Padrão, paisagens |
| "9:16" | Stories, vertical |
| "1:1" | Instagram, miniatura |
| "4:3" | Fotografia, apresentação |
| "3:4" | Retrato |
| "3:2" | Fotografia padrão |
| "2:3" | Retrato alto |
Se enviar uma imagem, o padrão é a proporção da imagem. Defina explicitamente para cortar/padronizar.
Usando imagens de referência para estilo
O parâmetro reference_images é um array de até 7 imagens para guiar estilo, conteúdo ou contexto. Não são quadros do vídeo, apenas referência visual.
Exemplo de uso:
{
"model": "grok-imagine-video",
"prompt": "A product rotating slowly on a clean white surface",
"image": {
"url": "https://example.com/product-shot.jpg"
},
"reference_images": [
{"url": "https://example.com/brand-style-reference-1.jpg"},
{"url": "https://example.com/lighting-reference.jpg"}
],
"duration": 6,
"resolution": "720p"
}
Você pode omitir image e usar apenas reference_images para guiar um texto para vídeo.
Estendendo e editando vídeos
Estender um vídeo
Use:
POST /v1/videos/extensions
Adicione segundos a um vídeo existente (máx. 15s por chamada):
curl -X POST https://api.x.ai/v1/videos/extensions \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"video_id": "seu_request_id_original",
"prompt": "The mist continues to lift as sunlight breaks through",
"duration": 5
}'
Faça polling do novo request_id normalmente.
Editar um vídeo
Use:
POST /v1/videos/edits
Altere conteúdo ou animação guiado por prompt:
curl -X POST https://api.x.ai/v1/videos/edits \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"video_id": "seu_request_id_original",
"prompt": "Change the sky to a dramatic sunset with deep orange tones"
}'
Extensões e edições seguem o mesmo padrão assíncrono de polling.
Detalhes de preços: quanto custa um vídeo de 10 segundos
| Componente | Custo |
|---|---|
| Imagem de entrada | US$ 0,002 por imagem |
| Saída 480p | US$ 0,05/seg |
| Saída 720p | US$ 0,07/seg |
Exemplo:
10s em 720p: Imagem = US$ 0,002; Saída = 10×US$ 0,07 = US$ 0,70.
Total: US$ 0,7026s em 480p: Imagem = US$ 0,002; Saída = 6×US$ 0,05 = US$ 0,30.
Total: US$ 0,302
A cobrança da imagem se aplica em toda geração, mesmo para a mesma imagem.
Como testar sua integração com a API Grok usando Apidog
O padrão assíncrono exige testar:
- Requisição POST retorna
request_id - Polling trata status
"processing" - Resposta final tem
status == "done"e URL de vídeo válida
Cenários de Teste do Apidog permitem automatizar esse fluxo:
Passo 1: Crie novo cenário de teste
No Apidog, acesse Testes > Novo cenário: "Fluxo assíncrono de imagem para vídeo Grok".
Passo 2: Adicione a requisição de geração
- URL:
https://api.x.ai/v1/videos/generations - Método: POST
- Header:
Authorization: Bearer {{xai_api_key}} - Corpo:
{
"model": "grok-imagine-video",
"prompt": "Gentle mist rises from the water as light filters through the trees",
"image": {
"url": "https://example.com/your-test-image.jpg"
},
"duration": 6,
"resolution": "480p"
}
Passo 3: Extraia o request_id
- Processador: Extrair Variável
- Nome:
video_request_id - Origem: Corpo da resposta
- JSONPath:
$.request_id
Passo 4: Loop de polling
- Processador: Loop For
- Dentro do loop:
- GET
https://api.x.ai/v1/videos/{{video_request_id}} - Extrair variável:
video_status($.status) - Esperar: 5000ms
- Condição de parada:
{{video_status}} == "done"
- GET
Passo 5: Afirmação da URL
- GET final
- Asserção:
$.video.urlnão está vazio
Rodando o cenário
Clique em Executar para rodar o fluxo. O Apidog executa POST, extrai ID, faz polling e verifica a URL do vídeo. O relatório mostra status e tempo de cada etapa.
Integre ao CI/CD:
apidog run --scenario grok-video-async-flow --env production
Erros comuns e soluções
-
401 Não Autorizado: Cheque o header
Authorizatione a chave no console xAI. - 422 Entidade Não Processável: Verifique se o corpo está correto, prompt não vazio, e imagem acessível.
- Imagem não acessível: Use uma URL pública ou base64; evite localhost e URLs privadas.
- Status travado em "processing": Pode levar até alguns minutos. Se passar de 10 minutos, tente novamente.
- Limite de taxa 429: Respeite 60 req/minuto, 1 req/segundo. Use sleep(1) no polling paralelo.
-
Upload base64 rejeitado: Confirme prefixo do data URI (ex:
data:image/jpeg;base64,). - Aspect ratio incompatível: Se diferente da imagem, pode haver corte/barras pretas. Ajuste para corresponder.
Conclusão
A API Grok de imagem para vídeo permite transformar fotos em clipes animados via POST + polling, baixando o MP4 ao final. O modelo grok-imagine-video liderou em janeiro de 2026, com mais de 1 bilhão de vídeos gerados. O polling assíncrono é o maior desafio; use Cenários de Teste do Apidog para garantir robustez na integração (extração de variável, loop, asserção de URL).
Comece a construir sua integração com Apidog gratuitamente. Não é necessário cartão de crédito.
FAQ (Perguntas Frequentes)
Qual modelo utilizar?
grok-imagine-video no campo model.
Diferença entre image e reference_images?
image: define o primeiro quadro.
reference_images: guia estilo/tema, não é quadro do vídeo.
Tempo de geração?
6s em 480p: 1~3 min.
15s em 720p: 4~8 min.
Poll a cada 5s.
Posso usar imagem local?
Sim, codifique como base64: data:image/jpeg;base64,{bytes}.
O que acontece sem aspect_ratio?
Com imagem, usa proporção da imagem. Sem imagem, padrão é 16:9.
Preço de 10s em 720p?
Imagem: US$ 0,002; Saída: 10×US$ 0,07 = US$ 0,70.
Total: US$ 0,702.
Limites de taxa?
60 requisições/minuto, 1 por segundo (POST e GET combinados).
Posso estender vídeos além de 15s?
Sim, usando POST /v1/videos/extensions e múltiplas chamadas, sempre via polling.
Links para Apidog mantidos conforme solicitado.

Top comments (0)