DEVELOPING

Listar las propiedades de un cliente

GET /property-v1/properties

Devuelve todas las propiedades que cargaste para el clientRef que pidas, con el estado de publicación de cada portal. Es la lectura que usás para reconciliar tu base con la nuestra: qué quedó cargado, qué se publicó y dónde.

curl https://property-api.mapaprop.com/property-v1/properties \
  -H "Authorization: Bearer $TOKEN" \
  -H "x-client-ref: cliente-42"

Respuesta 200:

{
  "clientRef": "cliente-42",
  "total": 42,
  "items": [
    {
      "paId": "01M4BS9DR88PCN2WNR5WSH82D4",
      "status": "active",
      "createdAt": "2026-10-07T13:21:04.118Z",
      "updatedAt": "2026-10-07T20:41:55.902Z",
      "canonical": { "code": "DEV-V3-909181", "type": 1, "title": "Depto en Palermo", "...": "..." },
      "verdictAtCreation": { "...": "..." },
      "portals": {
        "zonaprop": { "remoteStatus": "published", "itemId": "...", "url": "https://..." }
      }
    }
  ]
}
CampoQué es
clientRefDe quién es este listado. Viene en la respuesta para que no tengas que acordarte con qué header preguntaste
totalCuántas vinieron en ESTA respuesta, no cuántas tiene el cliente. Ver la nota de abajo
items[].paIdEl id con el que la pedís, la editás y la publicás
items[].statusactive, o deleted si la diste de baja (sólo aparece con includeDeleted=true)
items[].deletedAtCuándo la diste de baja. Sólo viene en las borradas — una activa no trae el campo
items[].canonicalEl objeto tal como lo mandaste
items[].portalsEl estado por portal: {} si nunca la publicaste
items[].verdictAtCreationEl veredicto del día que la cargaste. ⚠️ Es de ese día: si después arreglamos un mapeo, esto no lo sabe. El de hoy lo da el GET por paId

Los dos parámetros

ParámetroDefaultQué hace
limitsin topeCorta en las primeras N
includeDeletedfalseIncluye las que diste de baja
# las primeras 2
curl "https://property-api.mapaprop.com/property-v1/properties?limit=2" …

# también las dadas de baja
curl "https://property-api.mapaprop.com/property-v1/properties?includeDeleted=true" …

No hay paginación con cursor. Sin limit te devolvemos todo el inventario de ese cliente en una respuesta, y total es cuántas vinieron — no cuántas hay. O sea que total sin limit sí es el inventario completo, pero con limit es el tope que pediste y no sabés cuántas quedaron afuera.

Si manejás carteras grandes, pedí sin limit y procesá la respuesta entera. Si te hace falta paginar de verdad, escribinos a dev@mapaprop.com: el cursor no existe porque nadie lo necesitó todavía.

Es una lectura de nuestro sistema: no cuesta ninguna llamada del cupo de tu cliente en el portal. Lo que el portal dice de cada aviso lo trae la consulta de estado, que sí cuesta 1 por propiedad.

Qué devuelve de más que el GET por paId

Nada: el listado trae menos. Es una proyección pensada para recorrer, no para inspeccionar.

ListadoGET /properties/{paId}
El objeto y el estado por portal✅✅
El veredicto de HOY, recalculado❌ — el de la creación✅
El estado de las imágenes (images)❌✅
El detalle de la última publicación (lastPublish)❌✅

Para reconciliar, el listado alcanza. Para entender una propiedad, pedí la propiedad.

Códigos de respuesta

CódigoQué pasó
200El listado. Si el cliente no tiene ninguna, total: 0 e items: []
400Falta el header x-client-ref
401Token ausente o inválido
403Tu token no tiene el scope property-api-read

Un cliente sin propiedades devuelve 200 con items: [], no un 404. El 404 significaría que el cliente no existe, y eso lo contesta el GET del cliente.

Relacionado