Genera vídeos para anuncios inmobiliarios desde fotos, edítalos sin volver a renderizar, añade locuciones con IA y subtítulos sincronizados, y elige música de fondo — todo desde llamadas JSON síncronas.
POST/api/create_video
Crea un vídeo MP4 a partir de una lista de imágenes con efectos de movimiento, subtítulos opcionales, música de fondo, superposiciones con características de la propiedad y tarjetas finales. El endpoint es síncrono: bloquea hasta que se renderiza el vídeo y luego devuelve HTTP 200 con la videoUrl final.
Síncrono — configura un timeout de cliente generoso
El endpoint bloquea mientras se renderiza el vídeo y luego devuelve la URL reproducible. El renderizado puede tardar varios minutos, así que configura el timeout del cliente HTTP de forma generosa — los 30–60 segundos por defecto de la mayoría de librerías HTTP cortarán antes de que Pedra responda.
Parámetros principales
apiKeystringobligatorio
Tu clave API.
imagesarrayobligatorio
Lista ordenada de objetos image. Cada uno se convierte en un frame/clip del vídeo. Mira "Objeto image" abajo.
isVerticalboolean
Formato vertical 9:16 para Instagram Reels / TikTok. Por defecto es 16:9 horizontal.
Default:false
propertyCharacteristicsarray
Array de pares {label, value} (Bedrooms, Bathrooms, Surface, Price, etc). Se muestra por defecto en todos los frames cuando se proporciona; pon characteristics.enabled = false en una imagen para ocultarlo en ese frame.
musicobject
Música de fondo. Objeto: { enabled: boolean, track: string }.
voiceobject
Locución. Objeto: { enabled: boolean, audioId: string, showSubtitles: boolean }. Genera el audioId con /api/generate_voice. Mira la sección Voz más abajo.
brandingobject
Logo personalizado, foto del agente y color de marca. Mira la sección "Branding".
endingTitlestring
Titular que se muestra en la tarjeta final.
endingSubtitlestring
Subtítulo de la tarjeta final (normalmente un CTA o información de contacto).
propertyIdstring
Id opcional de la propiedad (de list_properties o create_property) a la que pertenecen estas fotos. Si se indica, el vídeo final se guarda en esa propiedad — visible en su pestaña Vídeos y editable desde la app — en lugar de devolverse solo como una URL.
Objeto image
Cada entrada de images describe un frame:
imageUrlstringobligatorio
URL de la foto (o data URI base64).
effectstringobligatorio
Efecto de movimiento aplicado a este frame.
Values:zoom-inzoom-outstatictransition
secondImageUrlstring
Requerido cuando effect = "transition". Imagen a la que transicionar.
subtitlestring
Subtítulo mostrado sobre este frame.
titlestring
Superposición de título grande (p. ej., "Living Room", "Kitchen").
watermarkobject
Config de marca de agua: { enabled, position, opacity }. Desactivada por defecto. Pon { enabled: true } para aplicar tu marca de agua (bottom-right, opacity 1.0 por defecto).
characteristicsobject
Muestra/oculta la superposición propertyCharacteristics en este frame. Activada por defecto cuando se proporciona propertyCharacteristics; pon { enabled: false } para ocultarla.
Walkthrough de 3 frames con efectos mezclados (zoom-in / zoom-out / transition / static), marca de agua personalizada + foto del agente + color de marca, música, locución, subtítulos por frame, superposición con características de la propiedad y tarjeta final. Coincide con el patrón de payload real que usa la propia app de Pedra.
{
"message": "Video created successfully",
"videoId": "<uuid>",
"videoUrl": "https://img.pedra.ai/<uuid>"
}
Créditos
Cada frame cuesta 5 créditos — excepto los frames con effect: "static", que son gratuitos. Un vídeo de 5 imágenes con todos los efectos zoom-in/zoom-out consume 25 créditos. Consulta Precios.
Errores de validación
Se devuelve HTTP 400 cuando:
Array images ausente o vacío.
Cualquier imagen sin imageUrl (el error indica el índice infractor).
effect no incluido en [zoom-in, zoom-out, transition, static].
effect: "transition" sin secondImageUrl.
Etiquetas de características disponibles
Cuando uses propertyCharacteristics, las siguientes claves de etiqueta se renderizan con iconos en la superposición: Bedrooms, Bathrooms, Surface, Price, Location, Parking, Heating, Outdoor. Las etiquetas personalizadas se aceptan pero se renderizan sin icono.
Actualizar un vídeo existente
POST/api/update_video
Edita un vídeo que ya creaste — mediante videoId — sin volver a renderizar los clips que no cambian. Reordenar, cambiar la música o la locución, modificar el branding, las tarjetas finales, los subtítulos y los títulos se vuelven a ensamblar gratis. Solo las fotos nuevas o modificadas se vuelven a animar (y consumen créditos). Como create_video, es síncrono y devuelve la nueva videoUrl. Si el vídeo se creó con un propertyId, ese vínculo se hereda automáticamente — no hace falta enviarlo de nuevo.
Semántica de actualización parcial
Todos los campos excepto videoId son opcionales. Omite images para conservar la línea de tiempo existente y cambiar solo audio/texto/branding (un re-ensamblado gratuito). Omite music, voice, branding o el texto final para dejar cada uno con su valor guardado — editar la música nunca borra la locución, y viceversa. Cuando sí envías images, un clip cuya foto + efecto (+ segunda foto en transiciones) coincide con uno existente se reutiliza tal cual.
Parámetros principales
apiKeystringobligatorio
Tu clave API.
videoIdstringobligatorio
Id del vídeo a editar (el videoId devuelto por create_video).
imagesarray
Lista ordenada completa de imágenes para reconstruir la línea de tiempo; los clips que coinciden con una foto + efecto existentes se reutilizan (sin re-renderizar, sin créditos). Omítelo para conservar la línea de tiempo actual y editar solo audio/texto/branding.
musicobject
Música de fondo. Objeto: { enabled: boolean, track: string }.
voiceobject
Locución. Objeto: { enabled: boolean, audioId: string, showSubtitles: boolean }. Genera el audioId con /api/generate_voice. Mira la sección Voz más abajo.
brandingobject
Logo personalizado, foto del agente y color de marca. Mira la sección "Branding".
endingTitlestring
Titular que se muestra en la tarjeta final.
endingSubtitlestring
Subtítulo de la tarjeta final (normalmente un CTA o información de contacto).
isVerticalboolean
Formato vertical 9:16 para Instagram Reels / TikTok. Por defecto es 16:9 horizontal.
propertyCharacteristicsarray
Array de pares {label, value} (Bedrooms, Bathrooms, Surface, Price, etc). Se muestra por defecto en todos los frames cuando se proporciona; pon characteristics.enabled = false en una imagen para ocultarlo en ese frame.
Los clips reutilizados no cuestan nada. Solo los frames nuevos o modificados (no estáticos) se vuelven a animar a 5 créditos cada uno. Una edición solo de música/voz/texto es gratuita. Nota: los vídeos creados antes de la reutilización de clips vuelven a animar todos los clips en su primera edición basada en imágenes.
Locución y audio
Un flujo de dos pasos: escribe un guion a partir de las fotos (o aporta el tuyo), renderízalo a audio y luego adjunta el audioId devuelto al objeto voice de un vídeo. Los subtítulos se generan automáticamente a partir de los tiempos de las palabras de la locución.
Generar un guion de locución
POST/api/generate_voice_script
Escribe un guion de locución breve y natural a partir de las fotos del anuncio y (opcionalmente) los datos de la propiedad. Usa visión para que el guion refleje lo que realmente aparece en las imágenes. Devuelve el texto del guion — pásalo a /api/generate_voice, o edítalo antes.
Parámetros principales
apiKeystringobligatorio
Tu clave API.
imagesarray
Fotos en las que basar el guion — un array de strings URL u objetos { imageUrl }. Las primeras se analizan con visión.
propertyCharacteristicsarray
Datos {label, value} opcionales de la propiedad para incorporar al guion (Bedrooms, Surface, Price, etc).
languagestring
Idioma del guion. Por defecto inglés. Mira /api/music_library para los valores aceptados.
{
"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."
}
La generación de guiones es gratuita.
Generar una locución
POST/api/generate_voice
Renderiza un guion a una pista de locución mediante texto a voz. Devuelve un audioId — pásalo a voice.audioId de un vídeo en create_video o update_video para adjuntar la narración (y sus subtítulos sincronizados).
Parámetros principales
apiKeystringobligatorio
Tu clave API.
textstringobligatorio
El guion a narrar. Máximo 1000 caracteres.
languagestring
Idioma de la voz (selecciona el locutor). Por defecto inglés. Mira /api/music_library para los valores aceptados.
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 locución cuesta 1 crédito. El límite de texto es de 1000 caracteres.
Listar la biblioteca de música
POST/api/music_library
Devuelve los valores válidos de music.track (claves de género) con etiquetas, además de los idiomas aceptados por los endpoints de locución. De solo lectura — nunca consume créditos y acepta GET o POST.