PUT /properties/{paId}
É SUBSTITUIÇÃO TOTAL: você envia o objeto completo, igual ao cadastro. O que não enviar fica esvaziado.
Por isso a resposta traz um diff, e os campos que foram esvaziados vão à parte em cleared.
Resource URL
PUT https://property-api.mapaprop.com/property-v1/properties/{paId}
Autenticação
Authorization: Bearer <seu token>. Requer o escopo 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
O corpo
O mesmo objeto do cadastro, completo, em canonical:
{
"canonical": { "…o objeto do imóvel, inteiro…" }
}
Os campos estão em O objeto JSON do imóvel.
Não é um PATCH. Enviar {"canonical": {"price": 230000}} não altera só o preço: apaga todo o
resto. Para alterar um campo, pegue o objeto que o GET
devolve, altere esse campo e envie o objeto inteiro.
A resposta
A resposta traz o clientRef, o mesmo que você enviou no envelope. Nós o devolvemos nos seis
caminhos (verify, cadastro, consulta, listagem, edição e exclusão) para que você possa cruzá-lo com a sua
base sem ter que lembrar com qual clientRef perguntou.
200 OK. É a resposta do cadastro — object,
portals, summary — mais o comprovante e o 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 — quais campos mudaram
Um por campo, com o valor anterior e o novo. O texto longo é resumido com o seu tamanho real
(…(1240 ch)) para a resposta continuar legível.
images e blueprint não aparecem aqui: têm o seu próprio bloco.
🔑 diff.cleared — o que foi esvaziado
A lista de campos que tinham valor e agora não têm. É a consequência da substituição total, colocada à parte para se ver de imediato.
Se cleared trouxer algo que você não queria esvaziar, envie o PUT de novo com esse campo incluído.
Nada foi publicado ainda.
diff.assets — as fotos
"assets": { "added": 2, "removed": 1, "unchanged": 7, "reordered": false }
São comparadas por URL, não por posição. Reordenar suas fotos sem alterá-las dá unchanged e
reordered: true — não conta como fotos novas.
| Campo | O que é |
|---|---|
added | URLs que não estavam antes: são as que baixamos |
removed | URLs que já não estão no objeto |
unchanged | As que continuam. Não são baixadas de novo |
reordered | As mesmas fotos em outra ordem. Importa: a primeira é a principal |
As imagens novas passam pelo mesmo ciclo
Se o PUT trouxer URLs novas, images.status volta a processing e o imóvel fica bloqueado enquanto as
baixamos — igual ao cadastro. As que já estavam hospedadas não são baixadas de novo.
Erros
| Código | Quando |
|---|---|
400 | Falta canonical no corpo |
401 | Token ausente, vencido ou inválido |
403 | Falta o escopo property-api-update |
404 | Esse paId não existe, ou está excluído |
409 | O imóvel está processando suas imagens |
Um PUT sobre um imóvel excluído devolve 404: não o traz de volta. Para tê-lo novamente,
cadastre-o outra vez — você vai receber um paId novo.
O que o PUT ainda NÃO faz
Não republica nos portais. Salva o imóvel e diz o que mudou, mas um anúncio já publicado em um portal não é atualizado sozinho. Isso chega com a etapa de publicação.
Relacionados
- POST /properties — o cadastro
- GET /properties — de onde você tira o objeto para modificar
- DELETE /properties/{paId} — excluir