BETA

PUT /properties/{paId}

Es REEMPLAZO TOTAL: mandás el objeto completo, igual que en el alta. Lo que no mandes, se vacía.

Por eso la respuesta trae un diff, y los campos que se vaciaron van aparte en cleared.

Resource URL

PUT https://property-api.mapaprop.com/property-v1/properties/{paId}

Autenticación

Authorization: Bearer <tu token>. Requiere el scope property-api-update.

curl -X PUT https://property-api.mapaprop.com/property-v1/properties/01M3PTZ8YBMM5DSNW03WP8VD9E \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d @propiedad.json

El cuerpo

El mismo objeto del alta, completo, en canonical:

{
  "canonical": { "…el objeto de la propiedad, entero…" }
}

Los campos están en El objeto JSON de la propiedad.

No es un PATCH. Mandar {"canonical": {"price": 230000}} no cambia sólo el precio: borra todo lo demás. Si querés cambiar un campo, tomá el objeto que te devuelve el GET, modificá ese campo y mandá el objeto entero.

La respuesta

La respuesta trae el clientRef, el mismo que mandaste en el sobre. Te lo devolvemos en los seis caminos (verify, alta, consulta, listado, edición y borrado) para que puedas cruzarlo con tu base sin tener que recordar con qué clientRef preguntaste.

200 OK. Es la respuesta del alta —object, portals, summary— más el acuse y el diff:

{
  "paId": "01M3PTZ8YBMM5DSNW03WP8VD9E",
  "updated": true,
  "updatedAt": "2026-09-29T23:41:02.118Z",
  "status": "active",
  "diff": {
    "property": {
      "price":       { "from": 245000, "to": 230000 },
      "description": { "from": "Departamento de 2 ambientes en el corazón…(1240 ch)", "to": "…(1310 ch)" },
      "toilettes":   { "from": 2, "to": null }
    },
    "assets":  { "added": 2, "removed": 1, "unchanged": 7, "reordered": false },
    "cleared": ["toilettes"],
    "changed": 6
  },
  "images": { "status": "processing", "total": 9, "processed": 7 }
}

diff.property — qué campos cambiaron

Uno por campo, con su valor anterior y el nuevo. El texto largo se resume con su largo real (…(1240 ch)) para que la respuesta siga siendo leíble.

images y blueprint no aparecen acá: tienen su propio bloque.

🔑 diff.cleared — qué se vació

La lista de campos que tenían valor y ahora no. Es la consecuencia del reemplazo total, puesta aparte para que se vea de un golpe.

Si cleared trae algo que no querías vaciar, mandá el PUT otra vez con ese campo incluido. Nada se publicó todavía.

diff.assets — las fotos

"assets": { "added": 2, "removed": 1, "unchanged": 7, "reordered": false }

Se comparan por URL, no por posición. Reordenar tus fotos sin cambiarlas da unchanged y reordered: true — no cuenta como fotos nuevas.

CampoQué es
addedURLs que no estaban antes: son las que bajamos
removedURLs que ya no están en el objeto
unchangedLas que siguen. No se vuelven a bajar
reorderedLas mismas fotos en otro orden. Importa: la primera es la principal

Las imágenes nuevas pasan por el mismo ciclo

Si el PUT trae URLs nuevas, images.status vuelve a processing y la propiedad queda bloqueada mientras las bajamos — igual que en el alta. Las que ya estaban alojadas no se vuelven a bajar.

Errores

CódigoCuándo
400Falta canonical en el body
401Token ausente, vencido o inválido
403Falta el scope property-api-update
404Ese paId no existe, o está borrado
409La propiedad está procesando sus imágenes

Un PUT sobre una propiedad borrada devuelve 404: no la resucita. Para volver a tenerla, dala de alta de nuevo — te va a dar un paId nuevo.

Lo que el PUT todavía NO hace

No republica en los portales. Guarda la propiedad y te dice qué cambió, pero el aviso que ya esté publicado en un portal no se actualiza solo. Eso llega con el paso de publicación.

Relacionados