API de modelos da FreeRap

Gere um vídeo de modelo a partir de uma imagem de referência. Crie uma tarefa e depois consulte o estado para obter o vídeo pronto.

URL basehttps://freerapvideo.com

Começar

Faça o primeiro pedido em quatro passos. Execute estes comandos no terminal ou no servidor.

  1. Crie uma chave de API

    Abra Configurações → API, crie uma chave e guarde o segredo sk_ completo numa variável de ambiente. Mantenha no seu servidor.

    Criar uma chave de API
    Shell
    export FREERAP_API_KEY='YOUR_API_KEY'

  2. Escolha um modelo e as opções

    Busque o catálogo público de modelos. Escolha um slug e um par modelo/resolução listado nas linhas dele. Confira name, imageSlots e defaultDurationSec. Este catálogo não exige chave de API.

    GET /api/template-prices
    curl https://freerapvideo.com/api/template-prices

  3. Crie uma tarefa de vídeo

    Este exemplo usa bulin com uma imagem de referência e pro / 720p. Confirme que essa combinação tem preço, troque a imagem de exemplo pela sua imagem HTTPS pública e guarde data.taskId da resposta.

    POST · cURL
    curl --request POST \
      'https://freerapvideo.com/api/v1/templates/bulin/generations' \
      --header "Authorization: Bearer $FREERAP_API_KEY" \
      --header 'Content-Type: application/json' \
      --data '{
        "reference_image_urls": ["https://cdn.example.com/face.jpg"],
        "model": "pro",
        "resolution": "720p"
      }'

  4. Obtenha o resultado

    Substitua TASK_ID por data.taskId. Consulte cerca de cada 30 segundos até success, failed ou canceled. Em caso de sucesso, leia data.videos.

    GET · cURL
    curl 'https://freerapvideo.com/api/v1/generations/TASK_ID' \
      --header "Authorization: Bearer $FREERAP_API_KEY"

Autenticação

Envie o cabeçalho Authorization nos dois endpoints de tarefa. Use a chave sk_ completa de Configurações → API. Uma chave ausente ou inválida devolve HTTP 401. Nunca exponha a chave no código do navegador.

HTTP
Authorization: Bearer <API_KEY>

Referência da API

O modelo fornece o prompt, o vídeo de referência e a banda sonora. O cliente fornece a imagem de referência e as opções de geração. URLs de callback não são aceitas; consulte a tarefa para obter os resultados.

Chamadas bem-sucedidas usam HTTP 200 com code 0, message ok e um objeto data. Erros de pedido usam code -1 e message. Uma consulta bem-sucedida pode informar uma geração que falhou em data.status.

Criar uma tarefa

POST/api/v1/templates/{campaign}/generations

Inicia uma geração de vídeo assíncrona para um modelo ativo. HTTP 200 confirma a criação da tarefa; o vídeo ainda está em processamento.

Cabeçalhos obrigatórios: Authorization: Bearer <API_KEY> e Content-Type: application/json.

Parâmetros de caminho

Criar uma tarefa: Parâmetros de caminho
CampoTipoObrigatórioDescrição
campaignstringSimSlug de modelo ativo, por exemplo bulin. Consulte em GET /api/template-prices.

Corpo do pedido

Integrações novas usam reference_image_urls, model e resolution. Estes são os campos comuns de todos os modelos.

Criar uma tarefa: Corpo do pedido
CampoTipoObrigatórioDescrição
reference_image_urlsstring[]SimExatamente N URLs HTTPS públicas de imagem, não vazias, iguais ao imageSlots do modelo. O item 1 do array mapeia para @Image1, o item 2 para @Image2, e assim por diante. A ordem é preservada; cada entrada é obrigatória.
modelstringNãobasic | pro | ultra. Padrão: pro. Precisa ter preço para este modelo e esta resolução.
resolutionstringNão480p | 720p | 1080p. Padrão: 720p. basic permite 480p e 720p. pro e ultra também permitem 1080p. Precisa ter preço para o modelo selecionado.

Requisitos da imagem de referência

reference_image_urls precisa conter exatamente N URLs HTTPS de imagem acessíveis publicamente, em que N é o valor imageSlots do modelo devolvido por GET /api/template-prices (1–5). Cada URL precisa servir JPEG, PNG ou WebP, até 10 MB por padrão, na porta 443. Textos vazios, entradas null, entradas faltando e entradas extras devolvem HTTP 400. O servidor busca e armazena cada imagem antes da geração. Arquivos locais, endereços de rede privada e URLs que exigem autenticação não são aceitos.

Configurações do modelo

Modelos: basic aceita 480p e 720p. pro e ultra também aceitam 1080p. Só combinações com preço para o modelo escolhido estão disponíveis. GET /api/template-prices lista as combinações atuais e os metadados do modelo. Duração e proporção são controladas pelo modelo: omita duration e aspect_ratio. image_url, effect, slots, prompt, reference_video_urls, callBackUrl e campos desconhecidos são rejeitados com HTTP 400.

A proporção é definida pelo modelo: 9:16, 16:9 ou adaptive. Adaptive segue o vídeo de referência do modelo. Não envie aspect_ratio (HTTP 400). O prompt salvo, a mídia de referência, a duração e a quantidade de imagens definem um efeito fixo para todos os modelos.

GET /api/template-prices

Resposta de sucesso

Só valores de exemplo. A quantia de 30 créditos é ilustrativa; use a cotação devolvida pelo seu pedido.

HTTP 200 · JSON
{
  "code": 0,
  "message": "ok",
  "data": {
    "taskId": "550e8400-e29b-41d4-a716-446655440000",
    "status": "processing",
    "credits_estimate": 30,
    "credits_charged": 30
  }
}

Criar uma tarefa: Campos da resposta
CampoTipoObrigatórioDescrição
data.taskIdstring (uuid)SimUUID da tarefa devolvido pelo endpoint de criação.
data.statusstringSimSempre processing quando a criação dá certo.
data.credits_estimateintegerSimPreço cotado da tarefa em créditos, reservado na criação.
data.credits_chargedintegerSimCréditos reservados enquanto roda; cobrança final retida num estado terminal, depois de qualquer reembolso.
Várias imagens de referência

Para um modelo configurado com imageSlots = 3, envie exatamente três URLs na ordem de referência do prompt. Substitua YOUR_TEMPLATE_SLUG pelo slug desse modelo. Este exemplo não significa que Bulin ou Dame Hombro exigem três imagens. Não há parâmetros position, effect nem slots.

POST · cURL
curl --request POST \
  'https://freerapvideo.com/api/v1/templates/YOUR_TEMPLATE_SLUG/generations' \
  --header "Authorization: Bearer $FREERAP_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
    "reference_image_urls": ["https://cdn.example.com/image-1.jpg", "https://cdn.example.com/image-2.jpg", "https://cdn.example.com/image-3.jpg"],
    "model": "pro",
    "resolution": "720p"
  }'

Erros · HTTP 400 / 401 / 402 / 403 / 404 / 429 / 500 / 503

Consultar uma tarefa

GET/api/v1/generations/{taskId}

Devolve o estado atual de uma tarefa criada pela API e pertencente ao usuário da chave. Sem corpo do pedido. Use a mesma chave da criação, ou outra chave válida do mesmo usuário.

Consultar uma tarefa: Parâmetros de caminho
CampoTipoObrigatórioDescrição
taskIdstring (uuid)SimUUID da tarefa devolvido pelo endpoint de criação.

Resposta de sucesso

HTTP 200 · JSON
{
  "code": 0,
  "message": "ok",
  "data": {
    "taskId": "550e8400-e29b-41d4-a716-446655440000",
    "status": "success",
    "campaign": "bulin",
    "costCredits": 30,
    "credits_estimate": 30,
    "credits_charged": 30,
    "createdAt": "2026-10-31T00:00:00.000Z",
    "videos": [
      "https://media.example.com/generated/video.mp4"
    ]
  }
}

Consultar uma tarefa: Campos da resposta
CampoTipoObrigatórioDescrição
data.taskIdstring (uuid)SimUUID da tarefa devolvido pelo endpoint de criação.
data.statusstringSimpending | processing | success | failed | canceled. Veja os estados da tarefa abaixo.
data.campaignstringNãoSlug público do modelo. Pode estar ausente em tarefas antigas.
data.credits_estimateintegerSimPreço cotado da tarefa em créditos, reservado na criação.
data.credits_chargedintegerSimCréditos reservados enquanto roda; cobrança final retida num estado terminal, depois de qualquer reembolso.
data.costCreditsintegerSimCampo de compatibilidade com o mesmo valor de credits_charged.
data.createdAtstring (date-time)SimHora de criação no formato ISO 8601 (UTC).
data.videosstring[]SimURLs de vídeo hospedadas no armazenamento da FreeRap quando dá certo; um array vazio nos outros estados.
data.errorstringNãoDescrição do erro quando disponível. Ausente durante pending ou processing; não é um código de erro estável.

Estados da tarefa

Estados da tarefa
EstadoTerminalDescrição
pendingNãoNa fila. Continue consultando.
processingNãoGerando. Continue consultando.
successSimConcluído. Leia videos e pare de consultar.
failedSimFalhou. Leia error quando existir e pare de consultar.
canceledSimCancelado. Pare de consultar.

Consulte cerca de cada 30 segundos. Pare num estado terminal. Um tempo esgotado na consulta não significa que a geração falhou; consulte a mesma tarefa de novo.

Falha da geração

HTTP 200 e code 0 significam que a consulta deu certo. A geração em si pode ter falhado: confira sempre data.status. Uma tarefa que falhou tem o campo videos vazio e pode incluir error.

HTTP 200 · JSON
{
  "code": 0,
  "message": "ok",
  "data": {
    "taskId": "550e8400-e29b-41d4-a716-446655440000",
    "status": "failed",
    "campaign": "bulin",
    "costCredits": 0,
    "credits_estimate": 30,
    "credits_charged": 0,
    "createdAt": "2026-10-31T00:00:00.000Z",
    "videos": [],
    "error": "Video generation failed."
  }
}

Erros · HTTP 401 / 404 / 429 / 500

Erros

Erros de pedido usam um estado HTTP fora de 2xx e o corpo abaixo. code é sempre -1 nestes erros; distinga as categorias pelo estado HTTP. message é um texto explicativo, não um identificador estável para máquina.

HTTP 402 · JSON
{
  "code": -1,
  "message": "Insufficient credits."
}

Erros
Estado HTTPEndpointCausaAção
400POSTJSON, campos, imagem, modelo, resolução ou duração inválidos.Corrija o pedido antes de tentar de novo.
401POST / GETChave de API ausente ou inválida.Confira o cabeçalho Authorization e a chave.
402POSTSaldo FreeRap insuficiente. Nenhuma tarefa é iniciada.Adicione créditos e depois crie a tarefa.
403POSTO modelo não tem preço para este par modelo/resolução.Escolha uma combinação com preço em /api/template-prices.
404POST / GETO modelo não está disponível, ou a tarefa está ausente, excluída, inacessível ou não foi criada pela API.Confira o slug ou o ID da tarefa e a conta. Pare de consultar uma tarefa indisponível.
429POST / GETLimite de ritmo ou de 30 tarefas em andamento excedido.Respeite Retry-After se existir, ou espere as tarefas em andamento terminarem.
500POST / GETErro inesperado do servidor.Tente consultar de novo mais tarde. Uma criação pode já ter começado; evite envios duplicados.
503POSTO preço em créditos, o armazenamento ou o serviço de geração não está disponível.Tente mais tarde; fale com o suporte se continuar.

Créditos e limites

Os créditos são reservados quando a tarefa é criada. Enquanto estiver pending ou processing, credits_charged é igual a credits_estimate. O sucesso mantém a cobrança. Falha ou cancelamento libera a reserva, menos qualquer taxa de falha configurada (padrão 0). Leia credits_charged na resposta terminal para o valor final.

Cada chave de API permite até 30 tarefas pending ou processing. Por instância do servidor, pedidos de criação ficam limitados a um por segundo e consultas a cinco por segundo por chave. HTTP 429 pode incluir Retry-After em segundos; quando estiver ausente, espere antes de tentar de novo.

Pedidos de criação não aceitam uma chave de idempotência. Se um POST expirar ou devolver um erro de servidor, a tarefa pode já ter sido criada. Evite reenviar às cegas, porque isso pode criar tarefas e cobranças duplicadas.