Все четыре инструмента работают задачей: ответ 202, результат - опросом или вебхуком (Задачи и результаты). Голос, музыку, финальную фразу и аватар выбирают из справочников (Справочные данные).
Пакет контента
POST /content/generate - область tools:contentgen. Из фактов объекта и фото GREM делает описания, посты для соцсетей, озвученное видео, сайт и PDF - одной задачей. Под пакет создается черновик объекта.
Нужно не меньше 4 фото - публичными адресами в form.media.photos. Свои файлы сначала загрузите через POST /uploads и передайте полученные url (Файлы).
| Поле | Тип | Описание |
|---|---|---|
form.language | строка | язык результата: eng, rus, ukr, deu, spa, aze, arb, fra, zho, tur |
form.media.photos | массив | 4-20 адресов фото (строки или { "url": "..." }) - обязательное |
form.objectId | строка | сделать пакет для вашего существующего объекта |
form.objectType | строка | property, rental или complex |
form.propertyCategory | строка | тип недвижимости: apartment, house, penthouse, land, warehouse ... |
form.dealType | строка | sale или rent |
form.title | строка | название |
form.description | строка | ваше описание - берется как факты |
form.customDirection | строка | пожелания к тону и акцентам, до 500 символов |
form.totalArea | число | м² |
form.rooms, form.floor, form.buildingFloors | число | комнаты, этаж, этажей |
form.landPlotArea | число | участок, м² (дома) |
form.price | число | цена |
form.priceCurrency | строка | валюта цены |
form.addressCountry, form.addressCity, form.street, form.streetNumber | строка | адрес |
form.voiceId | строка | голос озвучки из GET /voices |
form.enableSubtitles | да/нет | субтитры в видео, по умолчанию да |
form.showPhone | да/нет | показать телефон; номер - в form.contactPhone |
form.options.music.trackId | строка | трек из GET /video/music; form.options.music.enabled: false - без музыки |
form.options.endCard.style | строка | финальная карточка: photo, solid или split |
Поле user не нужно: пакет создается от имени аккаунта ключа.
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": "eng",
"propertyCategory": "apartment", "dealType": "sale",
"title": "Bright 2-room flat near the park",
"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"] }
}
}'
Ответ 202: jobId (id задачи) и propertyId (черновик объекта). Готовая задача (GET /content/generate/jobs/{id}) содержит:
| Поле | Описание |
|---|---|
artifacts | id готовых файлов |
artifactsSummary | по записи на файл: тип, формат, размер |
bundle | сайт и PDF пакета, если собраны |
progress | ход генерации, пока задача выполняется |
masterProfile | сюжетная основа, на которой построены тексты и озвучка |
error | у задачи со сбоем: причина, общим текстом |
Файл: GET /artifacts/v1/ai/assistant/announcement/jobs/{jobId}/artifacts/{artifactId}/download. События - content.completed, content.partial (часть файлов не получилась), content.failed. Меньше 4 фото - 400.
Тексты объявления
POST /text/generate - область tools:text. Описание, презентация и пост для соцсетей. Нужен либо objectId, либо хотя бы одно из: description, city, totalArea - иначе 422 с code: not_enough_input.
| Поле | Тип | Описание |
|---|---|---|
objectId | строка | ваш объект (или объект вашего агентства) |
title | строка | до 120 символов |
description | строка | ваше описание, до 2000 символов |
city | строка | город |
totalArea | число | м² |
rooms | число | комнат |
price | число | цена |
currency | строка | валюта цены |
propertyCategory | строка | тип недвижимости |
language | строка | en (по умолчанию), ru, ua, de, es, az, ar, fr, zh, tr |
customDirection | строка | пожелания к тону и акцентам; текст длиннее 500 символов обрезается до 500 |
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":"en","description":"Renovated, quiet courtyard, 5 min to U-Bahn."}'
Ответ 202 с jobId. Тексты - в файлах задачи, как у пакета контента; задача также содержит progress, masterProfile и error. События - text.completed / text.failed.
Видео из фото
POST /video/create - область tools:video. Короткое озвученное видео из ваших фото или из фото объекта.
Тело - multipart/form-data, каждый параметр отдельным полем формы (не JSON в поле data):
| Поле | Описание |
|---|---|
photos | файлы фото, от 1 до 8 - по части на файл; не нужны, если есть objectId; JPEG, PNG, WebP или HEIC до 20 МБ каждое; фото после 8-го не используются |
objectId | взять фото и факты из вашего объекта |
prompt | о чем ролик, до 500 символов; обязателен без objectId; более длинный текст обрезается |
title | название, до 120 символов |
length | short (по умолчанию) или long; другое значение считается short; для long нужно не меньше 4 фото (code: long_needs_more_photos) |
aspect | 9:16, 1:1 или 16:9; другое значение - по умолчанию |
language | язык озвучки: en, ru, ua, de, es, az, ar, fr, zh, tr |
narration | true (по умолчанию) - с озвучкой |
voiceId | голос из GET /voices |
enableSubtitles | субтитры |
musicEnabled | с музыкой |
musicTrackId | трек из GET /video/music |
musicVolume | громкость музыки, 0-100 |
music | свой файл музыки вместо трека |
endCardEnabled, endCardStyle | финальная карточка: photo, solid или split |
ctaMode | финальная фраза: auto (по умолчанию) - подбирается под объект; manual - берется ctaIntent или ctaText |
ctaIntent | готовая финальная фраза: одно из значений intent из GET /video/endings |
ctaText | своя финальная фраза, до 60 символов |
ctaMarket | к кому обращено видео: local, remote или international; настраивает фразу 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=Sunny 2-room flat in Berlin Mitte, quiet courtyard" \
-F "length=short" -F "aspect=9:16" -F "language=en"
Ответ 202 с jobId; видео - в файлах задачи. Задача также содержит progress, masterProfile и error, как у пакета контента. Цена зависит от length. События - video.completed / video.failed.
Видео с аватаром
POST /avatar/video - область tools:avatar. Ведущий рассказывает о вашем объекте.
| Поле | Тип | Описание |
|---|---|---|
avatarId | строка | обязательное: аватар со статусом ready из GET /avatar/avatars |
objectId | строка | обязательное: ваш объект |
scriptText | строка | обязательное: текст ведущего, от 100 символов; не больше 1200 |
voiceId | строка | голос из GET /voices |
language | строка | язык |
background.type | строка | фон: color, photo или slideshow |
background.color | строка | цвет фона #RRGGBB |
background.photoUrl | строка | фото фона |
dimension.width, dimension.height | число | размер кадра, 100-4096 px; передавайте оба или ни одного |
enableSubtitles | да/нет | субтитры |
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 с jobId. Видео: GET /artifacts/v1/ai/assistant/avatar/jobs/{jobId}/artifacts/{artifactId}/download, artifactId — из artifacts готовой задачи. События - avatar.completed / avatar.failed. Без avatarId, objectId или с коротким текстом - 400 с полями в errors.
Связанные статьи
- Справочные данные - голоса, аватары, музыка, финальные фразы.
- Задачи и результаты - состояния и файлы.
- Файлы - загрузка фото.