Les quatre outils fonctionnent sous forme de tâches : une réponse 202, puis le résultat par interrogation ou par webhook (Tâches et résultats). La voix, la musique, la phrase de clôture et l'avatar se choisissent dans les listes de référence (Données de référence).
Pack de contenu
POST /content/generate - scope tools:contentgen. À partir des caractéristiques du bien et des photos, GREM produit des descriptions, des publications pour les réseaux sociaux, une vidéo commentée, une page de destination et un PDF - en une seule tâche. Un brouillon d'annonce est créé pour le pack.
Au moins 4 photos sont requises - sous forme d'adresses publiques dans form.media.photos. Envoyez d'abord vos propres fichiers avec POST /uploads et transmettez les url renvoyées (Fichiers).
| Champ | Type | Description |
|---|---|---|
form.language | string | langue du résultat : eng, rus, ukr, deu, spa, aze, arb, fra, zho, tur |
form.media.photos | array | 4-20 adresses de photos (chaînes ou { "url": "..." }) - obligatoire |
form.objectId | string | construire le pack pour une de vos annonces existantes |
form.objectType | string | property, rental ou complex |
form.propertyCategory | string | type de bien : apartment, house, penthouse, land, warehouse ... |
form.dealType | string | sale ou rent |
form.title | string | titre |
form.description | string | votre description - utilisée comme source de faits |
form.customDirection | string | souhaits de ton et d'accents, jusqu'à 500 caractères |
form.totalArea | number | m² |
form.rooms, form.floor, form.buildingFloors | number | pièces, étage, nombre d'étages |
form.landPlotArea | number | terrain, m² (maisons) |
form.price | number | prix |
form.priceCurrency | string | devise du prix |
form.addressCountry, form.addressCity, form.street, form.streetNumber | string | adresse |
form.voiceId | string | voix de narration issue de GET /voices |
form.enableSubtitles | oui/non | sous-titres de la vidéo, activés par défaut |
form.showPhone | oui/non | afficher le téléphone ; le numéro se place dans form.contactPhone |
form.options.music.trackId | string | piste issue de GET /video/music ; form.options.music.enabled: false - sans musique |
form.options.endCard.style | string | carton de fin : photo, solid ou split |
Aucun champ user n'est nécessaire : le pack est créé au nom du compte de la clé.
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"] }
}
}'
Réponse 202 : jobId (identifiant de la tâche) et propertyId (le brouillon d'annonce). La tâche terminée (GET /content/generate/jobs/{id}) contient :
| Champ | Description |
|---|---|
artifacts | identifiants des fichiers générés |
artifactsSummary | une entrée par fichier : nature, format, taille |
bundle | la page de destination et le PDF du pack, lorsqu'ils ont été créés |
progress | avancement de la génération pendant l'exécution de la tâche |
masterProfile | le canevas narratif sur lequel reposent les textes et la narration |
error | pour une tâche en échec : la raison, sous forme de texte générique |
Fichier : GET /artifacts/v1/ai/assistant/announcement/jobs/{jobId}/artifacts/{artifactId}/download. Événements - content.completed, content.partial (certains fichiers ont échoué), content.failed. Moins de 4 photos - 400.
Textes d'annonce
POST /text/generate - scope tools:text. Une description, une présentation et une publication pour les réseaux sociaux. Nécessite soit objectId, soit au moins l'un des champs description, city, totalArea - sinon 422 avec code: not_enough_input.
| Champ | Type | Description |
|---|---|---|
objectId | string | votre annonce (ou celle de votre agence) |
title | string | jusqu'à 120 caractères |
description | string | votre description, jusqu'à 2000 caractères |
city | string | ville |
totalArea | number | m² |
rooms | number | pièces |
price | number | prix |
currency | string | devise du prix |
propertyCategory | string | type de bien |
language | string | en (par défaut), ru, ua, de, es, az, ar, fr, zh, tr |
customDirection | string | souhaits de ton et d'accents ; un texte plus long est tronqué à 500 caractères |
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 avec jobId. Les textes se trouvent dans les fichiers de la tâche, comme pour le pack de contenu ; la tâche contient aussi progress, masterProfile et error. Événements - text.completed / text.failed.
Vidéo à partir de photos
POST /video/create - scope tools:video. Une courte vidéo commentée à partir de vos photos ou des photos d'une annonce.
Corps - multipart/form-data, chaque option dans son propre champ de formulaire (et non du JSON dans un champ data) :
| Champ | Description |
|---|---|
photos | fichiers photo, de 1 à 8 - une partie par fichier ; inutile avec objectId ; JPEG, PNG, WebP ou HEIC jusqu'à 20 MB chacun ; les photos au-delà de la 8e ne sont pas utilisées |
objectId | prendre les photos et les caractéristiques de votre annonce |
prompt | le sujet de la vidéo, jusqu'à 500 caractères ; obligatoire sans objectId ; un texte plus long est tronqué |
title | titre, jusqu'à 120 caractères |
length | short (par défaut) ou long ; toute autre valeur est traitée comme short ; long nécessite au moins 4 photos (code: long_needs_more_photos) |
aspect | 9:16, 1:1 ou 16:9 ; toute autre valeur - la valeur par défaut |
language | langue de la narration : en, ru, ua, de, es, az, ar, fr, zh, tr |
narration | true (par défaut) - avec narration |
voiceId | voix issue de GET /voices |
enableSubtitles | sous-titres |
musicEnabled | avec musique |
musicTrackId | piste issue de GET /video/music |
musicVolume | volume de la musique, 0-100 |
music | votre propre fichier musical à la place d'une piste |
endCardEnabled, endCardStyle | carton de fin : photo, solid ou split |
ctaMode | phrase de clôture : auto (par défaut) - choisie en fonction de l'annonce ; manual - utiliser ctaIntent ou ctaText |
ctaIntent | une phrase de clôture prête à l'emploi : l'une des valeurs intent de GET /video/endings |
ctaText | votre propre phrase de clôture, jusqu'à 60 caractères |
ctaMarket | à qui s'adresse la vidéo : local, remote ou international ; ajuste la phrase auto |
curl -X POST https://developers.grem.capital/api/v1/video/create \
-H "Authorization: Bearer gsk_live_xxx" \
-F "photos=@living.jpg" -F "photos=@kitchen.jpg" -F "photos=@view.jpg" \
-F "prompt=Sunny 2-room flat in Berlin Mitte, quiet courtyard" \
-F "length=short" -F "aspect=9:16" -F "language=en"
202 avec jobId ; la vidéo se trouve dans les fichiers de la tâche. La tâche contient aussi progress, masterProfile et error, comme pour le pack de contenu. Le prix dépend de length. Événements - video.completed / video.failed.
Vidéo avec avatar
POST /avatar/video - scope tools:avatar. Un présentateur parle de votre annonce.
| Champ | Type | Description |
|---|---|---|
avatarId | string | obligatoire : un avatar au statut ready issu de GET /avatar/avatars |
objectId | string | obligatoire : votre annonce |
scriptText | string | obligatoire : le texte du présentateur, au moins 100 caractères ; au plus 1200 |
voiceId | string | voix issue de GET /voices |
language | string | langue |
background.type | string | arrière-plan : color, photo ou slideshow |
background.color | string | couleur d'arrière-plan #RRGGBB |
background.photoUrl | string | photo d'arrière-plan |
dimension.width, dimension.height | number | taille de l'image, 100-4096 px ; envoyez les deux ou aucun |
enableSubtitles | oui/non | sous-titres |
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 avec jobId. Vidéo : GET /artifacts/v1/ai/assistant/avatar/jobs/{jobId}/artifacts/{artifactId}/download, artifactId issu des artifacts de la tâche terminée. Événements - avatar.completed / avatar.failed. avatarId ou objectId manquant, ou texte trop court - 400 avec les champs dans errors.
Voir aussi
- Données de référence - voix, avatars, musique, phrases de clôture.
- Tâches et résultats - états et fichiers.
- Fichiers - envoi de photos.