Docs

Contenido y vídeo

Última actualización: 2026-10-037 min de lectura

Las cuatro herramientas funcionan como trabajos: respuesta 202, el resultado por consulta o webhook (Trabajos y resultados). La voz, la música, la frase final y el avatar se eligen de las listas de referencia (Datos de referencia).

Paquete de contenido

POST /content/generate: ámbito tools:contentgen. A partir de los datos del inmueble y de las fotos, GREM crea descripciones, publicaciones para redes, un vídeo con locución, una página de aterrizaje y un PDF, en un solo trabajo. Para el paquete se crea un borrador de inmueble.

Se necesitan al menos 4 fotos, como direcciones públicas en form.media.photos. Suba antes sus propios archivos con POST /uploads y pase las url devueltas (Archivos).

CampoTipoDescripción
form.languagecadenaidioma del resultado: eng, rus, ukr, deu, spa, aze, arb, fra, zho, tur
form.media.photosarrayde 4 a 20 direcciones de fotos (cadenas o { "url": "..." }): obligatorio
form.objectIdcadenacrear el paquete para su inmueble existente
form.objectTypecadenaproperty, rental o complex
form.propertyCategorycadenatipo de inmueble: apartment, house, penthouse, land, warehouse ...
form.dealTypecadenasale o rent
form.titlecadenatítulo
form.descriptioncadenasu descripción: se usa como base de hechos
form.customDirectioncadenapreferencias de tono y énfasis, hasta 500 caracteres
form.totalAreanúmerom²
form.rooms, form.floor, form.buildingFloorsnúmerohabitaciones, planta, plantas
form.landPlotAreanúmeroterreno, m² (casas)
form.pricenúmeroprecio
form.priceCurrencycadenamoneda del precio
form.addressCountry, form.addressCity, form.street, form.streetNumbercadenadirección
form.voiceIdcadenavoz de la locución, de GET /voices
form.enableSubtitlessí/nosubtítulos en el vídeo, activados por defecto
form.showPhonesí/nomostrar el teléfono; el número en form.contactPhone
form.options.music.trackIdcadenapista de GET /video/music; form.options.music.enabled: false, sin música
form.options.endCard.stylecadenatarjeta final: photo, solid o split

No hace falta el campo user: el paquete se crea en nombre de la cuenta de la clave.

curl -X POST https://developers.grem.capital/api/v1/content/generate \
  -H "Authorization: Bearer gsk_live_xxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0c0e3a5b-7d1e-4b8a-9b2f-1e6d4c3a2b10" \
  -d '{
    "form": {
      "language": "spa",
      "propertyCategory": "apartment", "dealType": "sale",
      "title": "Piso luminoso de 2 habitaciones junto al parque",
      "totalArea": 64, "rooms": 2, "price": 320000, "priceCurrency": "EUR",
      "addressCountry": "Germany", "addressCity": "Berlin",
      "media": { "photos": ["https://example.com/1.jpg", "https://example.com/2.jpg",
                             "https://example.com/3.jpg", "https://example.com/4.jpg"] }
    }
  }'

Respuesta 202: jobId (id del trabajo) y propertyId (el borrador del inmueble). El trabajo terminado (GET /content/generate/jobs/{id}) contiene:

CampoDescripción
artifactsids de los archivos generados
artifactsSummaryuna entrada por archivo: tipo, formato, tamaño
bundlela página de aterrizaje y el PDF del paquete, si se crearon
progressel avance de la generación mientras el trabajo está en curso
masterProfileel guion base sobre el que se crearon los textos y la locución
erroren un trabajo fallido: el motivo, como texto genérico

Archivo: GET /artifacts/v1/ai/assistant/announcement/jobs/{jobId}/artifacts/{artifactId}/download. Eventos: content.completed, content.partial (algunos archivos fallaron), content.failed. Menos de 4 fotos, 400.

Textos del anuncio

POST /text/generate: ámbito tools:text. Una descripción, una presentación y una publicación para redes. Se necesita objectId o al menos uno de description, city, totalArea; si no, 422 con code: not_enough_input.

CampoTipoDescripción
objectIdcadenasu inmueble (o el de su agencia)
titlecadenahasta 120 caracteres
descriptioncadenasu descripción, hasta 2000 caracteres
citycadenaciudad
totalAreanúmerom²
roomsnúmerohabitaciones
pricenúmeroprecio
currencycadenamoneda del precio
propertyCategorycadenatipo de inmueble
languagecadenaen (por defecto), ru, ua, de, es, az, ar, fr, zh, tr
customDirectioncadenapreferencias de tono y énfasis; un texto más largo se recorta a 500 caracteres
curl -X POST https://developers.grem.capital/api/v1/text/generate \
  -H "Authorization: Bearer gsk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"city":"Berlin","totalArea":64,"rooms":2,"propertyCategory":"apartment","language":"es","description":"Reformado, patio tranquilo, a 5 minutos del metro."}'

202 con jobId. Los textos están en los archivos del trabajo, como en el paquete de contenido; el trabajo lleva además progress, masterProfile y error. Eventos: text.completed / text.failed.

Vídeo a partir de fotos

POST /video/create: ámbito tools:video. Un vídeo corto con locución a partir de sus fotos o de las fotos de un inmueble.

Cuerpo: multipart/form-data, cada opción como campo de formulario propio (no JSON en un campo data):

CampoDescripción
photosarchivos de fotos, de 1 a 8, una parte por archivo; con objectId no hace falta; JPEG, PNG, WebP o HEIC de hasta 20 MB cada una; las fotos después de la 8.ª no se usan
objectIdtomar fotos y datos de su inmueble
promptde qué trata el clip, hasta 500 caracteres; obligatorio sin objectId; un texto más largo se recorta
titletítulo, hasta 120 caracteres
lengthshort (por defecto) o long; otro valor se toma como short; long necesita al menos 4 fotos (code: long_needs_more_photos)
aspect9:16, 1:1 o 16:9; otro valor: el predeterminado
languageidioma de la locución: en, ru, ua, de, es, az, ar, fr, zh, tr
narrationtrue (por defecto): con locución
voiceIdvoz de GET /voices
enableSubtitlessubtítulos
musicEnabledcon música
musicTrackIdpista de GET /video/music
musicVolumevolumen de la música, de 0 a 100
musicsu propio archivo de música en lugar de una pista
endCardEnabled, endCardStyletarjeta final: photo, solid o split
ctaModefrase final: auto (por defecto), elegida para el inmueble; manual, se usa ctaIntent o ctaText
ctaIntentuna frase final lista: uno de los valores intent de GET /video/endings
ctaTextsu propia frase final, hasta 60 caracteres
ctaMarketa quién se dirige el vídeo: local, remote o international; ajusta la frase auto
curl -X POST https://developers.grem.capital/api/v1/video/create \
  -H "Authorization: Bearer gsk_live_xxx" \
  -F "[email protected]" -F "[email protected]" -F "[email protected]" \
  -F "prompt=Piso soleado de 2 habitaciones en Berlin Mitte, patio tranquilo" \
  -F "length=short" -F "aspect=9:16" -F "language=es"

202 con jobId; el vídeo está en los archivos del trabajo. El trabajo lleva además progress, masterProfile y error, como el paquete de contenido. El precio depende de length. Eventos: video.completed / video.failed.

Vídeo con avatar

POST /avatar/video: ámbito tools:avatar. Un presentador habla de su inmueble.

CampoTipoDescripción
avatarIdcadenaobligatorio: un avatar con estado ready de GET /avatar/avatars
objectIdcadenaobligatorio: su inmueble
scriptTextcadenaobligatorio: el texto del presentador, al menos 100 caracteres; como máximo 1200
voiceIdcadenavoz de GET /voices
languagecadenaidioma
background.typecadenafondo: color, photo o slideshow
background.colorcadenacolor de fondo #RRGGBB
background.photoUrlcadenafoto de fondo
dimension.width, dimension.heightnúmerotamaño del encuadre, de 100 a 4096 px; envíe ambos o ninguno
enableSubtitlessí/nosubtítulos
curl -X POST https://developers.grem.capital/api/v1/avatar/video \
  -H "Authorization: Bearer gsk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"avatarId":"AVATAR_ID","objectId":"OBJECT_ID","voiceId":"VOICE_ID","scriptText":"..."}'

202 con jobId. Vídeo: GET /artifacts/v1/ai/assistant/avatar/jobs/{jobId}/artifacts/{artifactId}/download, con el artifactId de artifacts del trabajo terminado. Eventos: avatar.completed / avatar.failed. Si faltan avatarId u objectId o el texto es corto, 400 con los campos en errors.

Artículos relacionados

¿Le resultó útil este artículo?