Versión
La versión mayor está en la ruta: /api/v1. Dentro de v1 no rompemos las integraciones existentes. La versión actual del contrato es info.version en /openapi.json; aumenta con cada cambio.
Qué puede cambiar sin aviso
Estos cambios son compatibles, y su cliente debe soportarlos:
- operaciones y herramientas nuevas;
- campos de solicitud nuevos opcionales;
- campos de respuesta nuevos;
- valores nuevos en las enumeraciones de las respuestas (estados, códigos), códigos de error nuevos en
title, tipos nuevos de eventos de webhook; - cambios en el texto de
detail; - límites más altos.
Cómo escribir el cliente
- Ignore los campos de respuesta desconocidos.
- Trate un valor de enumeración, un código de error o un tipo de evento desconocido como «otro», no como un fallo.
- Ramifique según
status,titleycode, no según el texto dedetail. - No dependa del orden de los campos ni de la longitud de los ids.
- Básese en el estado del trabajo
state, no en elstatuspropio de la herramienta.
Qué se considera incompatible
Eliminar o renombrar una operación, un campo, un ámbito o un evento; un campo de solicitud obligatorio nuevo; cambiar el tipo o el significado de un campo; cambiar el código de estado para el mismo caso; restringir los valores permitidos. No hacemos estos cambios en v1 sin aviso: la operación se marca primero como deprecated en /openapi.json y en este registro, y sigue funcionando al menos 6 meses. La excepción es cerrar una vulnerabilidad.
Una corrección que hace que una respuesta coincida con esta documentación no es un cambio incompatible.
Registro de cambios
2026-10-03 - versión 1.16
Cambiado:
429llevacode:minute_limitodaily_limit(el límite diario de la clave, se reinicia a las 00:00 UTC).- Un inmueble escrito con una clave de agencia pertenece a la agencia; los webhooks
object.*ylead.*de inmuebles y leads de la agencia llegan también a sus direcciones. - Fotos del inmueble: hasta 50 para cualquier tipo, como en el panel.
- SDK 1.7.2: un fragmento vacío del flujo ya no parte un evento del chat.
Corregido:
PUT /objects/{kind}/{id}conserva el estado de moderación,isSoldy la publicación del inmueble; antes los reiniciaba (una edición simple despublicaba un anuncio activo).GET /objectsya no lista inmuebles de propietarios suspendidos; una ficha oculta a los invitados tampoco se entrega por id.PATCH /leads/{id}: el remitente de un lead sin contrato puede cambiar su estado, como en el panel; el cambio y el archivado se registran en el historial del lead.
2026-10-03 - versión 1.15
Cambiado:
PATCH /leads/{id}(estado) yDELETE /leads/{id}siguen las reglas del panel: finalización, cobro de comisión, contrato o acuerdo vigente:422con el motivo encode.?expand=historyya no lleva metadatos internos (tokens, ids de otros usuarios).- El límite diario del chat gratuito responde
code: free_daily_limitconRetry-Afterhasta las 00:00 UTC. GET /works:previewUrl,linkyobject.photoUrlson rutas/files/...paraGET /artifacts/{path}; en la última páginanextCursoresnull.- Alta de lead: los campos desconocidos se descartan (no se rechazan); la especificación recoge las longitudes que comprueba el servicio;
pool: trueentrega el lead al pool de la plataforma. - SDK 1.7.1:
jobs.waitespera un429;chat.streammaneja un CRLF partido entre fragmentos;artifact()aceptasignal.
Corregido:
- Vista previa de música: un
Rangemás allá del final es416(respondía404); un fallo del servicio de archivos es502, no404. - Un archivo de más de 15 MB en
POST /uploadses413. Un rechazo destrictPhotosindica las fotos que fallaron (code: photo_fetch_failed). - El rechazo de un paquete de contenido indica
form.media.photos. Sandbox: la revisión toma el primer archivo con cualquier nombre; las cadenas del alquiler y las claves internas de foto no se rechazan.
2026-10-03 - versión 1.14
Cambiado:
- Repetir la valoración exprés con el mismo
Idempotency-Keyahora es totalmente gratis: tampoco se cobra la llamada a la API. GET /works: uncursorque no esnextCursores400(la lista volvía a empezar en silencio).POST /webhooks/{id}/test: uneventTypeque no está en la lista es400(se enviaba una prueba genérica).- Swipe Match:
reasonCodesolo acepta los motivos de la lista, como el servicio siempre exigió; elkinddel lead puede serpool. - SDK 1.7.0:
jobs.waitresiste una consulta fallida;artifact()aceptarange;chat.streamlee flujos con CRLF y llama una vez por evento.
Corregido:
- Vista previa de música:
bytes=-Ndevuelve los últimos N bytes; unRangemás allá del final es416. - Un tiempo de conexión agotado antes de enviar la solicitud libera el
Idempotency-Key. - Sandbox: fotos de vídeo con cualquier nombre de campo que lea el servicio, números del alquiler como cadenas, PNG del flyer del tamaño indicado.
2026-10-03 - versión 1.13
Añadido:
GET /worksdevuelve lo que el panel muestra de cada resultado:street,streetNumber,previewUrl,link,repeatIndex,errory el inmueble (object).GET /chat/sessionsdocumenta sus parámetros:limit,cursor,q,projectId,archivedOnly,sort.Problem.titleen la especificación incluyerange_not_satisfiable; la lista de webhooks llevarequestId.- SDK 1.6.1:
chat.listSessionsacepta los parámetros de la lista.
Cambiado:
- La especificación indica límites que producción ya aplicaba:
scriptTextdel avatar hasta 1200 caracteres,formatsdel flyer hasta 3 ylayoutshasta 5, longitudes de los campos decontactsdel flyer,seedde la foto hasta 2147483647 y ninguna clave desconocida endatade la foto. - Valoración exprés: el gateway solo rechaza una solicitud sin ninguna superficie ni tipo de inmueble; si
landPlotAreacuenta lo decide el servicio (también cuenta un terreno indicado enpropertyTypeoapartmentType).
Corregido:
- El sandbox rechaza las fotos como producción (JPEG, PNG o WebP de hasta 25 MB:
JOB_CREATE_FAILED; una máscara fuera de cleanup:MASK_NOT_SUPPORTED) y acepta lo que producción recorta o sustituye (título, volumen, cierre y opciones de la frase final del vídeo, idioma de la página de aterrizaje, más de 20 fotos de contenido,furnishedcomo palabra en el alquiler). Un trabajo de informe ya no muestrapendingdespués derunning. - Una redirección de descarga rechazada se indica como tal y no como tiempo agotado; un sufijo de
Rangemás largo que el archivo devuelve el archivo entero. - SDK 1.6.1:
verifyWebhookSignaturefunciona en Node 18.
2026-10-03 - versión 1.12
Añadido:
416 range_not_satisfiablecomo problema RFC 9457 (llegaba con el cuerpo vacío).priceMinoral iniciar la mejora de fotos: lo que se cobra por la llamada, como lo muestra el panel.- SDK 1.6.0:
worksaceptafrom/to,chat.historyaceptalimit/cursorychat.sendMessageaceptastyle.
Cambiado:
GET /match/leads:limitmayor de 50 opagemayor de 1000 responden400(nunca se recortaban).POST /match/leads/{id}/events: unIdempotency-Keycon otro formato es400en lugar de descartarse en silencio.- Un campo que rechaza el flyer es
400 validationcon el nombre del campo (era422). - Una llamada cuyo pago aún se está reservando con el mismo
Idempotency-Keyes409 idempotency_conflict(era422). - Valoración exprés:
landPlotAreacuenta como superficie solo paraland, como en el servicio. - Un tiempo agotado, una conexión reiniciada o un socket cerrado a mitad de la respuesta dejan ocupado el
Idempotency-Key; solo lo libera una solicitud que nunca llegó al servicio. - SDK 1.6.0: una subida nunca se repite tras un
503; el oyente de cancelación se retira tras cada pausa.
Corregido:
- Los rechazos de PDF y de la página de aterrizaje llevan su motivo:
402conINSUFFICIENT_FUNDSoQUOTA_EXCEEDED(era422sincode). - El sandbox rechaza exactamente lo que rechaza producción: tipo y tamaño de los archivos subidos; los textos se recortan en lugar de rechazarse;
length,aspectylanguagede vídeo desconocidos toman el valor por defecto; los códigos del flyer no distinguen mayúsculas; un borrador sintype. La simulación de saldo insuficiente respondeINSUFFICIENT_FUNDS, el código que envía producción. limitypagelos recorta el propio gateway (GET /chat/history?limit=500respondía400;limit=0daba 20 en vez de 1).
2026-10-03 - versión 1.11
Añadido:
- Los resultados de los trabajos llevan los campos que muestra el panel: paquete de contenido, textos y vídeo,
progress,masterProfile(el guion base sobre el que se crearon los textos y la locución) yerroren un trabajo fallido; fotos,metadata.error; plano,rooms[].stable,rooms[].placement,sourceFileId. - Los navegadores (CORS) pueden leer las cabeceras
RateLimit-*,Retry-After,Grem-Sandbox,X-Request-IdyContent-Range.
Cambiado:
- Webhooks: una clave de prueba crea y gestiona solo direcciones del sandbox; estas reciben solo eventos de trabajos del sandbox, y las direcciones reales nunca los reciben.
limitypagefuera del rango se ajustan a él en lugar de400;kindenGET /objectsno distingue mayúsculas;roomsadmite decimales.Idempotency-Keypertenece a la clave de API, al método y a la ruta real (POST /objects/propertyyPOST /objects/rentalson operaciones distintas). Tras un tiempo de espera agotado, la creación de inmuebles y de leads retiene la clave 15 minutos, como las herramientas; una solicitud que nunca llegó al servicio la libera.text/generate:customDirectionse recorta a 500 caracteres.- SDK 1.5.1: un
503en una escritura se repite solo conIdempotency-Key; unRetry-Afterde más de 30 segundos no se espera;maxRetrieses como máximo 10; suAbortSignalcancela la pausa; los ids de mensaje funcionan en Node 18.
Corregido:
- El sandbox funciona como producción: comprobación de los campos
multipart, de los campos del informe por categoría, de los valores de calefacción de una casa, deapartmentTypecomerciales y de complejos; archivos solo de trabajos terminados, en la ruta de su herramienta y con ids de artefacto conocidos;Grem-Sandboxtambién en las respuestas dadas antes de comprobar la clave;Grem-Simulateno distingue mayúsculas. - Sin clave, los parámetros de consulta no válidos responden primero
401. - Una clave de agencia vinculada a un agente ya no lee los trabajos lanzados con la clave de toda la agencia.
- Las direcciones de webhook guardadas antes con otro puerto siguen recibiendo entregas.
- Un
Rangeimposible responde416en lugar de404; se acepta un documento para la revisión de informe de hasta 40 MB.
2026-10-03 - versión 1.10
Añadido:
- El código de error
conflict(409): el recurso está en un estado que no permite la acción (Errores). - Campos de la frase final del vídeo en
POST /video/create:ctaMode,ctaIntent,ctaText,ctaMarket; las opciones deGET /video/endingsllevanintentytext. GET /works: los filtrosfromyto.- SDK 1.5.0: la opción
maxRetries;429y503se repiten trasRetry-After.
Cambiado:
- Los parámetros de consulta se comprueban: un parámetro conocido con un valor no válido es
400 validationindicando el campo. - Webhooks: solo
httpsen el puerto 443, sin credenciales en la URL; la 11.ª dirección es422; los webhooks de la agencia solo se gestionan con la clave de toda la agencia. Idempotency-Keypertenece a la clave de API y a la operación; tras un tiempo de espera agotado de una herramienta, la clave queda reservada 15 minutos.- Los rechazos por dinero (cuota, deuda, uso razonable, saldo) son
402 insufficient_fundsconcode. - Una clave de agente de una agencia solo ve sus propios trabajos y archivos.
- Las descargas de archivos cuentan para el límite de frecuencia.
Corregido:
- Todo error, también un cuerpo demasiado grande o mal formado, llega como RFC 9457
application/problem+json; un cuerpo por encima del límite es413 payload_too_large. - El campo de vídeo
endingnunca se leía; usectaIntentoctaText. - SDK:
simulatecon una clave real lanza un error en vez de ejecutar la llamada.
2026-10-03 - versiones 1.8-1.9
Añadido:
- Comparables:
estimate.analogsen la valoración exprés,analogsen el informe completo,compsen la estimación de alquiler - lo mismo que en el panel y en el PDF. - Los campos de los trabajos terminados se describen por completo: cifras del informe con sus nombres reales (
potPrice,priceRangeLow,priceRangeHigh, …), revisión, plano, foto, flyer, borrador. - SDK 1.4.0: el tipo
Analog.
Cambiado:
- Las respuestas de las herramientas solo llevan campos documentados; los campos internos que se colaban ya no se devuelven.
- Una herramienta que
GET /tools/statusmarca como no disponible responde503 service_unavailableantes de cobrar nada (antes solo el paquete de contenido, los textos y el vídeo). - La confirmación de la revisión de informe solo lleva campos del trabajo (
jobId,state,status); ya no incluye el_idobsoleto.
Corregido:
- Vídeo con avatar:
artifactscontiene los id necesarios para la URL de descarga. checkIn/checkOutde alquileres se documentan como hora del día.
2026-10-02: versión 1.7
Añadido:
- Sandbox: las claves de prueba (
gsk_test) simulan las herramientas sin cobrar; el encabezadoGrem-Simulateelige el resultado. estimate.confidenceScoreen la valoración exprés.
Cambiado:
- Las llamadas que lanzan una herramienta esperan hasta 5 minutos en lugar de 60 segundos.
- La valoración exprés repetida con el mismo
Idempotency-Keydevuelve el resultado terminado sin un segundo cobro, también tras un tiempo de espera agotado.
Corregido:
estimate.confidencede la valoración exprés era siemprenull.- Las respuestas del plano ya no llevan campos internos.
GET /objectssinkindy los rechazos de inmuebles y leads ahora explican el motivo endetail.
2026-10-02: versión 1.6
Cambiado:
- Cada respuesta de un trabajo lleva el mismo campo
jobId. Los nombres anterioresid,_id,contentGenJobIdse siguen devolviendo y están obsoletos. - SDK 1.2.0:
Job.jobIdsiempre está presente.
2026-10-02: versiones 1.2 a 1.5
Añadido:
GET /voices,GET /avatar/avatars,GET /video/music,GET /video/endings: ids para las herramientas (Datos de referencia).GET /tools/status: disponibilidad de las herramientas;GET /works: historial de trabajos.POST /flyer/create: folleto personal, ámbitotools:flyer.POST /valuation/review/jobs/{id}/confirm: confirmación de los datos de una revisión de informe.- El campo
stateen cada respuesta de trabajo. - En los errores, los campos
codeyerrors, los códigosforbidden,payload_too_large,service_unavailable. - En la descripción de la API, esquemas completos de solicitud y respuesta para cada herramienta, el contrato completo de escritura de inmuebles por tipo, la clase de cobro de cada operación (
x-grem-billing), la lista de ámbitos y de eventos. - Documentados los parámetros
scope(inmuebles) ypool(leads).
Cambiado:
- Un rechazo por falta de datos (por ejemplo, textos sin descripción ni ciudad) es ahora
422 business_rulecon motivo y código. Antes era502 provider_error. - Un rechazo por permisos sobre un recurso es ahora
403 forbiddencon motivo. Antes era500. - La entrega de prueba de un webhook para herramientas tiene la misma forma que una real:
{ jobId, status, state }.
Corregido:
- Las claves de agencia funcionan con todas las herramientas, el chat y la descarga de archivos.
- Revisión de informe y plano: el estado del trabajo está disponible con el id de la respuesta, y los webhooks llegan.
- La descarga de archivos del paquete de contenido, de textos y de vídeo solo está disponible para el propietario del trabajo.