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.
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 APIShellexport FREERAP_API_KEY='YOUR_API_KEY'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-pricescurl https://freerapvideo.com/api/template-pricesCrie 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 · cURLcurl --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" }'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 · cURLcurl '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.
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
/api/v1/templates/{campaign}/generationsInicia 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
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
campaign | string | Sim | Slug 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.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reference_image_urls | string[] | Sim | Exatamente 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. |
model | string | Não | basic | pro | ultra. Padrão: pro. Precisa ter preço para este modelo e esta resolução. |
resolution | string | Não | 480p | 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-pricesResposta de sucesso
Só valores de exemplo. A quantia de 30 créditos é ilustrativa; use a cotação devolvida pelo seu pedido.
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"credits_estimate": 30,
"credits_charged": 30
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
data.taskId | string (uuid) | Sim | UUID da tarefa devolvido pelo endpoint de criação. |
data.status | string | Sim | Sempre processing quando a criação dá certo. |
data.credits_estimate | integer | Sim | Preço cotado da tarefa em créditos, reservado na criação. |
data.credits_charged | integer | Sim | Cré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.
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"
}'Consultar uma tarefa
/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.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
taskId | string (uuid) | Sim | UUID da tarefa devolvido pelo endpoint de criação. |
Resposta de sucesso
{
"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"
]
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
data.taskId | string (uuid) | Sim | UUID da tarefa devolvido pelo endpoint de criação. |
data.status | string | Sim | pending | processing | success | failed | canceled. Veja os estados da tarefa abaixo. |
data.campaign | string | Não | Slug público do modelo. Pode estar ausente em tarefas antigas. |
data.credits_estimate | integer | Sim | Preço cotado da tarefa em créditos, reservado na criação. |
data.credits_charged | integer | Sim | Créditos reservados enquanto roda; cobrança final retida num estado terminal, depois de qualquer reembolso. |
data.costCredits | integer | Sim | Campo de compatibilidade com o mesmo valor de credits_charged. |
data.createdAt | string (date-time) | Sim | Hora de criação no formato ISO 8601 (UTC). |
data.videos | string[] | Sim | URLs de vídeo hospedadas no armazenamento da FreeRap quando dá certo; um array vazio nos outros estados. |
data.error | string | Não | Descrição do erro quando disponível. Ausente durante pending ou processing; não é um código de erro estável. |
Estados da tarefa
| Estado | Terminal | Descrição |
|---|---|---|
pending | Não | Na fila. Continue consultando. |
processing | Não | Gerando. Continue consultando. |
success | Sim | Concluído. Leia videos e pare de consultar. |
failed | Sim | Falhou. Leia error quando existir e pare de consultar. |
canceled | Sim | Cancelado. 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.
{
"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
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.
{
"code": -1,
"message": "Insufficient credits."
}| Estado HTTP | Endpoint | Causa | Ação |
|---|---|---|---|
400 | POST | JSON, campos, imagem, modelo, resolução ou duração inválidos. | Corrija o pedido antes de tentar de novo. |
401 | POST / GET | Chave de API ausente ou inválida. | Confira o cabeçalho Authorization e a chave. |
402 | POST | Saldo FreeRap insuficiente. Nenhuma tarefa é iniciada. | Adicione créditos e depois crie a tarefa. |
403 | POST | O modelo não tem preço para este par modelo/resolução. | Escolha uma combinação com preço em /api/template-prices. |
404 | POST / GET | O 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. |
429 | POST / GET | Limite de ritmo ou de 30 tarefas em andamento excedido. | Respeite Retry-After se existir, ou espere as tarefas em andamento terminarem. |
500 | POST / GET | Erro inesperado do servidor. | Tente consultar de novo mais tarde. Uma criação pode já ter começado; evite envios duplicados. |
503 | POST | O 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.
