Las dos herramientas reciben un archivo como multipart/form-data.
Mejora de fotos
POST /photo/enhance: ámbito tools:photo, trabajo. Una foto por solicitud.
Partes del formulario:
| Parte | Descripción |
|---|---|
image | la foto: obligatorio; JPEG, PNG o WebP de hasta 25 MB |
mask | solo cleanup: una máscara PNG, el blanco marca la zona a cambiar |
data | opciones como una cadena JSON: obligatorio |
Opciones en data:
| Campo | Descripción |
|---|---|
mode | enhance: luz, color, nitidez; cleanup: eliminar cosas; staging: amueblar una habitación vacía. Por defecto cleanup |
prompt | obligatorio para cleanup y staging (de 3 a 500 caracteres): qué eliminar o cómo amueblar; opcional para enhance |
intensity | light, medium (por defecto), strong |
roomType | living, bedroom, kitchen, bathroom, dining, office, outdoor |
furnitureStyle | para staging: modern, scandinavian, industrial, luxury, minimalist, coastal |
autoMask | cleanup sin máscara propia: encontrar la zona automáticamente |
seed | un número para un resultado reproducible |
negativePrompt | qué evitar, hasta 300 caracteres |
objectId, objectType | su inmueble al que pertenece la foto (property o complex) |
curl -X POST https://developers.grem.capital/api/v1/photo/enhance \
-H "Authorization: Bearer gsk_live_xxx" \
-F 'data={"mode":"cleanup","prompt":"quitar la silla y las cajas"}' \
-F "[email protected]"
Una máscara con enhance o staging se rechaza: allí no tiene efecto, y no se cobra nada. El precio depende del modo. Rechazos: una máscara fuera de cleanup: 422 con code: MASK_NOT_SUPPORTED; otro tipo de archivo o un archivo de más de 25 MB: 422 con code: JOB_CREATE_FAILED; una clave desconocida en data: 400. La respuesta de inicio lleva sku y priceMinor: lo que se cobra por la llamada (falta si la cubre la cuota del plan).
202 con jobId. El trabajo terminado (GET /photo/enhance/jobs/{id}):
| Campo | Descripción |
|---|---|
results | variantes del resultado |
results[].variant | número de variante |
results[].url | dirección de la imagen |
results[].width, results[].height | tamaño |
metadata.error | en un trabajo fallido: el motivo, como texto genérico |
Archivo de una variante: GET /artifacts/v1/ai/photo-enhancement/jobs/{jobId}/download/{variant}. Eventos: photo.completed / photo.failed.
Limpieza de planos
POST /floorplan/create: ámbito tools:floorplan. Una foto o un escaneo de un plano se convierte en un plano limpio con nombres de estancias y superficies. Se procesa al momento: el 202 ya contiene el resultado.
| Parte | Descripción |
|---|---|
file | la imagen del plano (JPEG, PNG, WebP, HEIC; hasta 20 MB): obligatorio; también se acepta el nombre image |
objectId | adjuntar el resultado a su inmueble |
objectType | property, rental o complex |
curl -X POST https://developers.grem.capital/api/v1/floorplan/create \
-H "Authorization: Bearer gsk_live_xxx" \
-F "[email protected]"
Respuesta:
| Campo | Descripción |
|---|---|
jobId | id del trabajo |
status | done: nombres aceptados automáticamente; review: resultado listo, conviene revisar los nombres; rejected: la imagen no es un plano; failed: fallo |
state | completed para done y review, failed para rejected y failed |
rooms | estancias: label, area (m², si están rotuladas), stable (la etiqueta se leyó igual en cada pasada), placement (dónde está la etiqueta en el plano limpio) |
totalArea | superficie total, m², si las superficies figuran en el plano |
cleanedFileId | la imagen del plano limpio |
sourceFileId | el plano que usted subió |
Informe: GET /artifacts/v1/ai/floor-plan/jobs/{id}/report.pdf. Volver a obtener el resultado: GET /floorplan/create/jobs/{id}. Eventos: floorplan.completed / floorplan.failed. Si la imagen no es un plano, no se cobra nada.