Gere vídeos de anúncios a partir de fotos, edite-os sem voltar a renderizar, adicione narrações com IA e legendas sincronizadas, e escolha música de fundo — tudo a partir de chamadas JSON síncronas.
POST/api/create_video
Constrói um vídeo MP4 a partir de uma lista de imagens com efeitos de movimento, legendas opcionais, música de fundo, sobreposições com características do imóvel e cartões finais. O endpoint é síncrono: bloqueia até o vídeo ser renderizado e depois devolve HTTP 200 com o videoUrl final.
O endpoint bloqueia enquanto o vídeo é renderizado, depois devolve o URL reproduzível. A renderização pode demorar vários minutos, por isso define o timeout do teu cliente HTTP de forma generosa — os 30–60 segundos padrão da maioria das bibliotecas HTTP terminarão antes da Pedra responder.
Parâmetros de topo
apiKeystringobrigatório
A tua chave API.
imagesarrayobrigatório
Lista ordenada de objetos image. Cada um torna-se um frame/clip no vídeo. Ver "Objeto image" abaixo.
isVerticalboolean
Formato vertical 9:16 para Instagram Reels / TikTok. Por defeito 16:9 horizontal.
Default:false
propertyCharacteristicsarray
Array de pares {label, value} (Bedrooms, Bathrooms, Surface, Price, etc). Mostrado por defeito em todos os frames quando fornecido; define characteristics.enabled = false numa imagem para o ocultar nesse frame.
musicobject
Música de fundo. Objeto: { enabled: boolean, track: string }.
voiceobject
Narração. Objeto: { enabled: boolean, audioId: string, showSubtitles: boolean }. Gera o audioId com /api/generate_voice. Ver a secção Voz abaixo.
brandingobject
Logo personalizado, foto do agente e sobreposição de cor de marca. Ver secção "Branding".
endingTitlestring
Título mostrado no cartão final.
endingSubtitlestring
Subtítulo do cartão final (normalmente uma CTA ou informação de contacto).
propertyIdstring
Id opcional da propriedade (de list_properties ou create_property) a que estas fotos pertencem. Quando definido, o vídeo final é guardado nessa propriedade — visível no separador Vídeos e editável a partir da app — em vez de ser apenas devolvido como URL.
Objeto image
Cada entrada de images descreve um frame:
imageUrlstringobrigatório
URL da foto (ou data URI base64).
effectstringobrigatório
Efeito de movimento aplicado a este frame.
Values:zoom-inzoom-outstatictransition
secondImageUrlstring
Obrigatório quando effect = "transition". Imagem para a qual transicionar.
subtitlestring
Legenda mostrada sobre este frame.
titlestring
Sobreposição de título grande (ex.: "Living Room", "Kitchen").
watermarkobject
Configuração da marca de água: { enabled, position, opacity }. Desativada por defeito. Define { enabled: true } para aplicar a tua marca de água (bottom-right, opacity 1.0 por defeito).
characteristicsobject
Mostra/oculta a sobreposição propertyCharacteristics neste frame. Ativada por defeito quando propertyCharacteristics é fornecido; define { enabled: false } para a ocultar.
Walkthrough de 3 frames com efeitos mistos (zoom-in / zoom-out / transition / static), marca de água personalizada + foto do agente + cor da marca, música, narração, legendas por frame, sobreposição com características do imóvel e cartão final. Corresponde ao padrão de payload real que a própria app Pedra utiliza.
{
"message": "Video created successfully",
"videoId": "<uuid>",
"videoUrl": "https://img.pedra.ai/<uuid>"
}
Créditos
Cada frame custa 5 créditos — exceto frames com effect: "static", que são gratuitos. Um vídeo de 5 imagens com todos os efeitos zoom-in/zoom-out consome 25 créditos. Ver Preços.
Erros de validação
HTTP 400 é devolvido para:
Array images em falta ou vazio.
Qualquer imagem sem imageUrl (o erro indica o índice em falta).
effect fora de [zoom-in, zoom-out, transition, static].
effect: "transition" sem secondImageUrl.
Rótulos de características disponíveis
Ao usar propertyCharacteristics, as seguintes chaves de rótulo são renderizadas com ícones correspondentes na sobreposição: Bedrooms, Bathrooms, Surface, Price, Location, Parking, Heating, Outdoor. Rótulos personalizados são aceites mas renderizados sem ícone.
Atualizar um vídeo existente
POST/api/update_video
Edita um vídeo que já criaste — através do videoId — sem voltar a renderizar os clips inalterados. Reordenar, trocar a música ou a narração, alterar o branding, os cartões finais, as legendas e os títulos são reagrupados gratuitamente. Apenas fotos novas ou alteradas são reanimadas (e consomem créditos). Tal como o create_video, é síncrono e devolve o novo videoUrl. Se o vídeo foi criado com um propertyId, essa ligação é herdada automaticamente — não é preciso voltar a enviá-lo.
Semântica de atualização parcial
Todos os campos exceto videoId são opcionais. Omite images para manter a linha de tempo existente e mudar apenas áudio/texto/branding (um reagrupamento gratuito). Omite music, voice, branding ou o texto final para deixar cada um no valor guardado — editar a música nunca apaga a narração, e vice-versa. Quando envias images, um clip cuja foto + efeito (+ segunda foto nas transições) corresponde a um existente é reutilizado tal como está.
Parâmetros de topo
apiKeystringobrigatório
A tua chave API.
videoIdstringobrigatório
Id do vídeo a editar (o videoId devolvido por create_video).
imagesarray
Lista ordenada completa de imagens para reconstruir a linha de tempo; os clips que correspondem a uma foto + efeito existentes são reutilizados (sem voltar a renderizar, sem créditos). Omite para manter a linha de tempo atual e editar apenas áudio/texto/branding.
musicobject
Música de fundo. Objeto: { enabled: boolean, track: string }.
voiceobject
Narração. Objeto: { enabled: boolean, audioId: string, showSubtitles: boolean }. Gera o audioId com /api/generate_voice. Ver a secção Voz abaixo.
brandingobject
Logo personalizado, foto do agente e sobreposição de cor de marca. Ver secção "Branding".
endingTitlestring
Título mostrado no cartão final.
endingSubtitlestring
Subtítulo do cartão final (normalmente uma CTA ou informação de contacto).
isVerticalboolean
Formato vertical 9:16 para Instagram Reels / TikTok. Por defeito 16:9 horizontal.
propertyCharacteristicsarray
Array de pares {label, value} (Bedrooms, Bathrooms, Surface, Price, etc). Mostrado por defeito em todos os frames quando fornecido; define characteristics.enabled = false numa imagem para o ocultar nesse frame.
Os clips reutilizados não custam nada. Apenas frames novos ou alterados (não estáticos) são reanimados a 5 créditos cada. Uma edição apenas de música/voz/texto é gratuita. Nota: vídeos criados antes da reutilização de clips reanimam todos os clips na sua primeira edição baseada em imagens.
Narração e áudio
Um fluxo em dois passos: escreve um guião a partir das fotos (ou fornece o teu), renderiza-o para áudio e depois anexa o audioId devolvido ao objeto voice de um vídeo. As legendas são geradas automaticamente a partir dos tempos das palavras da narração.
Gerar um guião de narração
POST/api/generate_voice_script
Escreve um guião de narração curto e natural a partir das fotos do anúncio e (opcionalmente) dos dados do imóvel. Usa visão para que o guião reflita o que está realmente nas imagens. Devolve o texto do guião — passa-o a /api/generate_voice, ou edita-o antes.
Parâmetros de topo
apiKeystringobrigatório
A tua chave API.
imagesarray
Fotos para basear o guião — um array de strings URL ou objetos { imageUrl }. As primeiras são analisadas com visão.
propertyCharacteristicsarray
Dados {label, value} opcionais do imóvel para incorporar no guião (Bedrooms, Surface, Price, etc).
languagestring
Idioma do guião. Por defeito inglês. Ver /api/music_library para os valores aceites.
{
"message": "Script generated successfully",
"script": "Welcome to this bright, renovated two-bedroom apartment. Step into a sunlit, open-plan living space with room to breathe across 85 square metres."
}
A geração do guião é gratuita.
Gerar uma narração
POST/api/generate_voice
Renderiza um guião numa faixa de narração por conversão de texto em voz. Devolve um audioId — passa-o ao voice.audioId de um vídeo em create_video ou update_video para anexar a narração (e as suas legendas sincronizadas).
Parâmetros de topo
apiKeystringobrigatório
A tua chave API.
textstringobrigatório
O guião a narrar. Máximo 1000 caracteres.
languagestring
Idioma da voz (seleciona o locutor). Por defeito inglês. Ver /api/music_library para os valores aceites.
Default:English
curl -X POST https://app.pedra.ai/api/generate_voice \
-H "Content-Type: application/json" \
-d '{
"apiKey": "YOUR_API_KEY",
"text": "Welcome to this bright, renovated two-bedroom apartment.",
"language": "English"
}'
Cada narração custa 1 crédito. O limite de texto é de 1000 caracteres.
Listar a biblioteca de música
POST/api/music_library
Devolve os valores válidos de music.track (chaves de género) com rótulos, mais os idiomas aceites pelos endpoints de narração. Apenas leitura — nunca consome créditos e aceita GET ou POST.