Este servicio devuelve la lista de desarrollos inmobiliarios de tu cuenta (la inmobiliaria dueña del token). El scope sale del access token, no se envía como parámetro.

Información del recurso
AutenticaciónRequerida (Token de API, Bearer)
Scopeexpress-base
Método HTTPGET
RespuestaJSON
Versión1

URL del recurso

https://mapaprop.app/api/action/express-v1/developments

Código de ejemplo

GET /api/action/express-v1/developments?customerId=1&dateFrom=20-02-2019&dateTo=28-02-2019 HTTP/1.1
Host: mapaprop.app
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Authorization: Bearer {access_token}

Parámetros

ClaveTipoRequeridoDescripción
customerIdintnoSe ignora. El scope sale del access token: la búsqueda se acota siempre a la inmobiliaria dueña del token, y un customerId enviado en la consulta no tiene ningún efecto.
termstringnoTérmino que intenta coincidir con al menos 3 caracteres en la zona, dirección o título de la propiedad. Admite búsqueda de texto completo.
typeintnoSiempre se sobreescribe con 23 (Desarrollo Inmobiliario) por la API. Cualquier valor enviado por el usuario es ignorado. Constantes
operationintnoOperación de la propiedad. Constantes
fromintnoNúmero de registro inicial. El valor por defecto es 0.
sizeintnoCantidad de registros a traer en cada consulta. El valor por defecto es 7. El máximo es 20 (error de validación: "You cannot retrieve more than 20 properties at a time").
branchIdintnoID de la sucursal donde se encuentran las propiedades.
stateIdintnoID del estado o provincia de la propiedad.
countyIdintnoID del partido o municipio de la propiedad.
cityIdintnoID de la ciudad de la propiedad.
tempOccupancyintnoNúmero de personas que pueden hospedarse en la propiedad.
dateFromstringnoFecha de llegada (formato: "dd-MM-yyyy").
dateTostringnoFecha de salida (formato: "dd-MM-yyyy").

Paginación

Este endpoint utiliza paginación por offset a través de los parámetros from y size.

ParámetroSignificadoValor por defectoMáximo
fromOffset (base cero) del primer registro a devolver0—
sizeCantidad de registros devueltos por solicitud720

La respuesta siempre incluye el campo total con el total de registros que coinciden con los filtros (no solo los de la página actual). Usá ese valor para saber cuándo dejar de paginar.

Cómo paginar

Para obtener la página N (índice 1) con un tamaño fijo de página:

from = (N - 1) * size

Seguí solicitando la siguiente página mientras from + size < total.

Ejemplo: paginar 25 desarrollos, 20 por página

Supongamos que una búsqueda devuelve "total": 25. Para obtener todos los resultados se necesitan 2 solicitudes:

Página 1 — registros 1 a 20:

GET /api/action/express-v1/developments?from=0&size=20

Respuesta: { "took": 8, "total": 25, "properties": [ ...20 items... ] }

Página 2 — registros 21 a 25:

GET /api/action/express-v1/developments?from=20&size=20

Respuesta: { "took": 6, "total": 25, "properties": [ ...5 items... ] }

En este punto from + size = 40 >= total = 25, por lo que no hay más páginas.

Notas

  • Mantené los filtros consistentes entre páginas. Cambiar cualquier filtro entre solicitudes (por ejemplo operation, stateId, dateFrom) reinicia el conjunto de resultados y tu offset apuntará a una colección diferente.
  • size no puede superar 20. Solicitar size=21 o más devuelve un error de validación: "You cannot retrieve more than 20 properties at a time". Para recuperar conjuntos grandes debés paginar.
  • from es un offset, no un número de página. from=2 devuelve registros a partir de la posición 3, no "página 2".
  • Los filtros numéricos esperan un entero. Un valor fuera del rango de un entero (por ejemplo, un número de 20 dígitos) o con decimales retorna un error de validación en vez de ignorarse en silencio.
  • El campo took indica el tiempo en milisegundos que tardó la búsqueda en el servidor para esa página.

Respuesta

Un documento JSON con la lista de zonas en jerarquía donde el cliente tiene propiedades.

ObjetoCampoTipoRequeridoDescripción
ResponsetookintyesTiempo que tardó la búsqueda, en milisegundos
totalintyesTotal de registros en el contexto de esta búsqueda. Podés paginarlo
propertiesArray of PropertyyesLa lista de objetos Property
PropertypropertyHashstringyesID único de la propiedad
timestampstringyesTimestamp ISO8601 de cuándo se creó la propiedad
lastUpdatestringyesTimestamp ISO8601 de la última actualización de la propiedad
codestringyesCódigo único de la propiedad ingresado por el cliente
branchIdintyesID de la sucursal asociada a esta propiedad. GET /api/action/express-v1/branches.
typeintyesId del tipo de propiedad. GET /api/action/express-v1/types
operationintyesId de la operación de la propiedad. Constantes
propertyTypestringyesDescripción traducida del tipo de propiedad. GET /api/action/express-v1/types
propertyOperationstringyesDescripción traducida de la operación de la propiedad. Constantes
statusstringyesDescripción traducida del estado constructivo. Constantes
mainImagestringnoId del tipo de propiedad. GET /api/action/express-v1/types
currencystringyesSímbolo de moneda del precio de la propiedad. Constantes
priceintyesPrecio de la propiedad
expensesCurrencystringnoSímbolo de moneda de las expensas mensuales/anuales. Constantes
expensesPriceintnoMonto de las expensas mensuales/anuales
taxCurrencystringnoSímbolo de moneda de los impuestos mensuales/anuales. Constantes
taxPriceintnoMonto de los impuestos mensuales/anuales
titlestringyesTítulo ingresado por el cliente
addressstringyesDirección y número de la propiedad
zipCodestringyesCódigo postal de la propiedad
zonestringyesDescripción combinada desde ciudad (si está disponible) hasta estado
countryIdintyesID del país de la propiedad
stateIdintyesID del estado o provincia. GET /api/action/express-v1/zones
countyIdintyesID del partido o municipio. GET /api/action/express-v1/zones
cityIdintnoID de la ciudad. GET /api/action/express-v1/zones
countryIdintyesID del país. GET /api/action/express-v1/zones
countrystringyesNombre del país
statestringyesNombre del estado o provincia
countystringyesNombre del partido o segunda división
citystringnoNombre de la ciudad, barrio o tercera división
suspendedbooleanyesLa publicación ha sido suspendida
reservedbooleanyesLa propiedad ha sido reservada
rentedbooleanyesLa propiedad ha sido alquilada
soldbooleanyesLa propiedad ha sido vendida
descriptionstringyesDescripción larga de la propiedad
conditionsstringnoCondiciones de la propiedad. Generalmente relacionadas con los pagos
bedroomsintnoNúmero de dormitorios
ambiencesintnoNúmero de ambientes o espacios
bathroomsintnoNúmero de baños
dependenciesintnoNúmero de cuartos de servicio
occupancyintnoNúmero de ocupantes (generalmente en alquiler temporario)
toilettesintnoNúmero de toilettes (baños de media)
buildingAreaintnoMetros cuadrados de superficie construida
landAreaintnoMetros cuadrados del terreno
yearsOldintnoAntigüedad de la propiedad
ubicationstringnoOrientación cardinal de la propiedad en el edificio
totalFloorsintnoTotal de pisos del edificio
apartmentsPerFloorintnoCantidad de departamentos por piso
airConditionerTypestringnoTipo de aire acondicionado
waterHeaterTypestringnoTipo de calefón
heatingTypestringnoTipo de calefacción
balconyTypestringnoTipo de balcón
garageintnoTotal de cocheras de la propiedad
garageTypestringnoTipo de cochera
imagesArray of ImagenoArray de objetos Image
locationLocationyesObjeto Location
LocationlonstringyesLongitud geográfica de la propiedad
latstringyesLatitud geográfica de la propiedad
ImageimagestringyesURL de la imagen
thumbnailstringyesURL del thumbnail
orientationintyesOrientación de la imagen. 1 = PORTRAIT, 2 = LANDSCAPE
typeintyesTipo de imagen. 1 = PHOTO, 2 = BLUEPRINT
contentTypestringyesTipo de contenido de la imagen
timestampstringyesTimestamp ISO8601 de cuándo se subió la imagen
LabelslabelsArray of labelsnoEtiquetas de la propiedad. Constantes
attributesattributesArray of json attributesnoTodos los atributos de la propiedad
descriptionFormatteddescriptionstringnoDescripción con formato nuevo que acepta saltos de línea

Los campos propios del desarrollo

Un desarrollo es una propiedad con campos extra, y son los que lo hacen útil:

CampoTipoRequeridoDescripción
developmentbooleanyesSiempre true en este servicio
developmentPropertiesArray of intnoLos Id de las unidades que componen el desarrollo. Son los que le pasás a GET /development/properties para traer el detalle de cada una
commercialTaglinestringnoLa leyenda comercial del proyecto, tal como la cargó la inmobiliaria
deliveryDatestringnoFecha de entrega, en formato ISO8601 con zona horaria
logoUrlstringnoURL del logo del desarrollo. Es el logo del proyecto, no el de la inmobiliaria
totalApartmentsintnoTotal de viviendas del proyecto
totalTowersintnoTotal de torres
totalElevatorsintnoTotal de ascensores
totalOfficesintnoTotal de oficinas
totalCommercialUnitsintnoTotal de locales comerciales
totalHousesintnoTotal de casas
totalLotsintnoTotal de lotes

Son los valores que declaró la inmobiliaria para el proyecto. No son el resultado de contar las unidades de developmentProperties: un desarrollo puede anunciar 500 viviendas y tener cargadas 12.

Un 0 significa "no lo declaró", no "cero".

Los siete contadores son opcionales, y cuando la inmobiliaria no los carga el servicio devuelve 0, no los omite. Así que "totalTowers": 0 no quiere decir que el proyecto no tenga torres: quiere decir que nadie informó cuántas.

Si vas a mostrar el dato, tratá al 0 como ausencia. Un sitio que publique "0 torres" está afirmando algo que la inmobiliaria nunca dijo.

Es la convención del objeto, no de este grupo: aplica igual a los enteros opcionales que ya existían —totalFloors, floors, apartmentsPerFloor, toilettes, dependencies, expensesPrice y taxPrice—, que se comportan del mismo modo desde siempre.

Los tres campos no numéricos se OMITEN cuando están vacíos.

commercialTagline, deliveryDate y logoUrl no vienen en null: directamente no aparecen en el JSON. Es la otra mitad de la misma convención, y necesitás las dos para leer bien una respuesta: en los numéricos preguntás por el valor, en estos por la existencia de la clave.

developmentStats — los números DERIVADOS de las unidades

Desde el 2026-10-27 cada desarrollo trae un bloque developmentStats con los indicadores que salen de contar sus unidades. No lo cargó nadie: se calcula en el backend a partir de las unidades que el desarrollo tiene vinculadas, y se recalcula cuando una de ellas cambia.

Es la otra mitad del grupo anterior, y hay que leerlas juntas.

Los siete contadores (totalApartments, totalTowers…) son lo que declaró la inmobiliaria para el proyecto. developmentStats es lo que hay cargado. Un desarrollo puede anunciar 500 viviendas (totalApartments: 500) y tener 12 unidades cargadas (developmentStats.units.total: 12). Las dos cosas son ciertas y responden preguntas distintas.

"developmentStats": {
  "units":  { "total": 4, "available": 4, "sold": 0, "rented": 0, "reserved": 0,
              "suspended": 0, "withOperation": 0, "availabilityRate": 100 },
  "sale":   { "units": 4, "commercialized": 0, "rate": 0 },
  "rent":   { "units": 0, "commercialized": 0, "rate": null },
  "otherOperation": { "units": 0 },
  "buildingArea": { "unit": "m2", "total": 936, "available": 936,
                    "unavailable": 0, "sold": 0, "rented": 0, "reserved": 0 },
  "prices": { "mixedCurrencies": false,
              "byCurrency": { "ARS": { "units": 4, "from": 2333333, "to": 2333333,
                                       "total": 9333332, "average": 2333333 } } },
  "typology": { "byAmbiences": { "2": 4 }, "byRooms": { "2": 4 },
                "byBuildingArea": { "234": 4 }, "byLandArea": { "250": 4 } }
}
RamaQué trae
unitscuántas unidades hay y en qué estado. withOperation cuenta unidades, no estados: una vendida Y reservada cuenta una. availabilityRate es el porcentaje disponible sobre el total
sale / rentla comercialización por operación, cada una contra su propio universo
otherOperationlas unidades en permuta, traspaso, compartir o remate. Existen para que sale.units + rent.units + otherOperation.units dé el total y ninguna unidad desaparezca
buildingArealos m² cubiertos. unavailable es un OR (vendida ‖ reservada ‖ alquilada), así que una unidad con dos estados se descuenta una sola vez
prices.byCurrencyel desglose por moneda: from/to el rango, total la suma, average el promedio
typologycuántas unidades hay por ambientes, dormitorios, m² cubiertos y m² totales. Las claves son el valor; las que no están, no las tiene ninguna unidad

rate en null NO es 0.

sale.rate y rent.rate vienen en null cuando no hay ninguna unidad de esa operación: la pregunta "¿cuánto se comercializó de lo que está en venta?" no tiene respuesta si no hay nada en venta, y un 0 % sería una respuesta falsa. Un 0 sí significa algo: hay unidades en venta y no se colocó ninguna.

En un desarrollo de puros alquileres vas a ver sale.rate: null y rent.rate con un número. Eso es correcto: son dos negocios distintos y no se promedian juntos.

Los precios NO tienen campos planos, y es a propósito.

No hay prices.from, prices.to, prices.total ni prices.average al nivel del bloque: sólo byCurrency. Si un desarrollo tiene unidades en dólares y en pesos, cualquier número único que los mezcle es falso, no aproximado — un promedio de 120.000 USD y 95.000.000 ARS no es ni dólares ni pesos.

mixedCurrencies te dice si hay más de una. Con una sola —el caso habitual— el único balde de byCurrency ES el dato del desarrollo: leelo y listo.

Sólo los desarrollos lo traen. Una propiedad común no lleva developmentStats en absoluto: no tiene unidades de las que derivarlo, así que la pregunta no existe. No es un bloque en cero — no está la clave.

Se recalcula solo. Cuando una unidad se vende, se alquila, cambia de precio, de superficie o se borra, el bloque del desarrollo se actualiza en el mismo momento. No hay que pedir nada ni esperar un proceso.

developmentId — de qué desarrollo es una propiedad

Desde el 2026-10-26 toda propiedad trae developmentId: el Id del desarrollo al que pertenece, o 0 si no pertenece a ninguno.

CampoTipoRequeridoDescripción
developmentIdintyesId del desarrollo del que esta propiedad es unidad. 0 = no es unidad de ningún desarrollo

Es el inverso de developmentProperties, y completa la relación en los dos sentidos: con developmentProperties vas del proyecto a sus unidades; con developmentId, de una unidad a su proyecto.

Un desarrollo también puede tener developmentId. Si es un sub-desarrollo —una etapa dentro de un proyecto más grande— va a traer development: true, su propio developmentProperties y el developmentId de su proyecto padre. Las tres cosas a la vez.

Campos adicionales

Cada desarrollo trae además los mismos campos extra que una propiedad —seoUrl, typeDesc, operationDesc, descriptionFormatted, publishedAt, floors, garages, branchSeoUrl, customerCountry, customerCountryDesc, videos, alternativePrices, reservations y tempOccupied— documentados en GET /properties.

La respuesta incluye también campos de uso interno de Mapaprop que no forman parte de este contrato y pueden cambiar sin aviso: embeddingVersion, vectorizedAt, configs, moderationStatus, publication y networks. No construyas nada sobre ellos.

Respuesta de ejemplo

{
"took":6,
"total":3,
"properties": [
        {
"zipCode":"1884",
"country":"Argentina",
"developmentProperties": [
198102
            ],
"landArea":133,
"county":"Almirante Brown",
"buildingArea":235,
"cityId":897,
"type":220,
"ambiences":2,
"zone":"Malvinas Argentinas, Almirante Brown, Buenos Aires, Argentina",
"price":1200000,
"airConditionerType":"Central",
"publication": [
                {
"mercadolibre":false,
"plan":"no-plan"
                },
                {
"cabaprop":false,
"plan":"no-plan"
                },
                {
"zonaprop":false,
"plan":"no-plan"
                },
                {
"navent":false,
"plan":"no-plan"
                }
            ],
"state":"Buenos Aires",
"branchId":1,
"images": [],
"development":true,
"descriptionFormatted":"Descripcion de un desarrollo unico del sistema.",
"bathrooms":2,
"suspended":false,
"labels": [
"laundry",
"playroom",
"suite"
            ],
"propertyOperation":"Venta",
"bedrooms":2,
"garages":1,
"yearsOld":12,
"reserved":false,
"lastUpdate":"2024-10-22T12:21:00.000-03:00",
"customerCountryDesc":"Argentina",
"code":"1-DESARROLLO-3",
"city":"Malvinas Argentinas",
"description":"Descripcion de un desarrollo unico del sistema.",
"alternativePrices": [],
"title":"titulo de desarrollo",
"networks": [
"4",
"5"
            ],
"customerCountry":1,
"countryId":1,
"seoUrl":"venta-de-desarrollo-inmobiliario-en-malvinas-argentinas-almirante-brown-buenos-aires-1-247058",
"rented":false,
"countyId":140,
"propertyType":"Desarrollo Inmobiliario",
"hightlight": {},
"currency":"ARS",
"timestamp":"2024-10-03T00:00:00.000-03:00",
"sold":false,
"address":"Calle 123 1537",
"stateId":2,
"garage":1,
"propertyHash":"1a9ad9df2c25980db55e6f74c5d62b94",
"mainImage":"https://s3.amazonaws.com/mapaprop-dev-image/photos/noimage.gif",
"garageType":"Espacio Guarda Coche",
"location": {
"lon":"-58.54596230000001",
"lat":"-34.5904958"
            },
"attributes": [
                {
"group_sub":"label",
"country":"ar",
"key_legacy":"hasLaundry",
"group_subtype":"spaces",
"id":"laundry",
"label":"Lavadero",
"locale":"es_AR",
"type":"bool",
"group":"propertyAttribute",
"status":true
                },
                {
"group_sub":"label",
"country":"ar",
"key_legacy":"petsReady",
"group_subtype":"extras",
"id":"petsReady",
"label":"Apto mascotas",
"locale":"es_AR",
"type":"bool",
"group":"propertyAttribute",
"status":true
                },
                {
"group_sub":"label",
"country":"ar",
"key_legacy":"playroom",
"group_subtype":"spaces",
"id":"playroom",
"label":"Playroom",
"locale":"es_AR",
"type":"bool",
"group":"propertyAttribute",
"status":true
                },
                {
"group_sub":"label",
"country":"ar",
"key_legacy":"hasPrivatElevator",
"group_subtype":"ammenities",
"id":"private-elevator",
"label":"Elevador privado",
"locale":"es_AR",
"type":"bool",
"group":"propertyAttribute",
"status":true
                },
                {
"group_sub":"label",
"country":"ar",
"key_legacy":"suite",
"group_subtype":"spaces",
"id":"suite",
"label":"Dormitorio en suite",
"locale":"es_AR",
"type":"bool",
"group":"propertyAttribute",
"status":true
                }
            ],
"operation":1
        }
    ]
}