This service will return the list of real estate developments of your account (the agency that owns the token). The scope comes from the access token, it is not sent as a parameter.

Resource information
AuthenticationRequired (API Token, Bearer)
Scopeexpress-base
HTTP MethodGET
ResponseJSON
Version1

Resource URL

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

Sample code

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}

Parameters

KeyTypeRequiredDescription
customerIdintnoIgnored. The scope comes from the access token: the search is always scoped to the agency that owns the token, and a customerId sent in the query has no effect.
termstringnoA term that will try to match at least 3 characters in the zone, address or title of the property. Full text search capabilities.
typeintnoAlways overridden to 23 (Desarrollo Inmobiliario) by the API. Any user-provided value is ignored. Constants
operationintnoAn operation of the property. Constants
fromintnoThe start record number. Default is 0.
sizeintnoThe amount of records to bring in each query. Default is 7. Maximum is 20 (validation error: "You cannot retrieve more than 20 properties at a time").
branchIdintnoThe ID of the branch where the properties are located.
stateIdintnoThe state ID of the property
countyIdintnoThe county ID of the property
cityIdintnoThe city ID of the property
tempOccupancyintnoThe number of people who can live in a property
dateFromstringnoThe date you want to arrive (format is "dd-MM-yyyy")
dateTostringnoThe date you want to leave (format is "dd-MM-yyyy")

Pagination

This endpoint uses offset-based pagination via the from and size query parameters.

ParameterMeaningDefaultMaximum
fromZero-based offset of the first record to return0—
sizeNumber of records returned per request720

The response always includes a total field with the total number of records matching your filters (not just the ones returned in the current page). Use it to know when to stop paginating.

How to paginate

To retrieve page N (1-indexed) with a fixed page size:

from = (N - 1) * size

Keep requesting the next page while from + size < total.

Example: paginate through 25 developments, 20 per page

Assume a search returns "total": 25. To get every result you need 2 requests:

Page 1 — records 1 to 20:

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

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

Page 2 — records 21 to 25:

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

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

At this point from + size = 40 >= total = 25, so there are no more pages.

Notes

  • Keep filters consistent across pages. Changing any filter between requests (e.g. operation, stateId, dateFrom) resets the result set and your offset will point to a different collection.
  • size cannot exceed 20. Requesting size=21 or more returns a validation error: "You cannot retrieve more than 20 properties at a time". To retrieve large result sets you must paginate.
  • from is an offset, not a page number. from=2 returns records starting at position 3, not "page 2".
  • Numeric filters expect an integer. A value outside the range of an integer (a 20-digit number, for instance) or one with decimals returns a validation error instead of being silently ignored.
  • The took field is the time in milliseconds the search took on the server side for that page only.

Response

A JSON document with the list of zones in a hierarchy where the customer has properties.

ObjectFieldTypeRequiredDescription
ResponsetookintyesHow long the search took in milliseconds
totalintyesHow many total records are in the context of this search. You can paginate thru them
propertiesArray of PropertyyesThe list of Property objects
PropertypropertyHashstringyesA unique ID for the property
timestampstringyesISO8601 timestamp of when the property was created
lastUpdatestringyesISO8601 timestamp of when the property was last updated
codestringyesA unique code of the property entered by the customer
branchIdintyesThe ID of the branch that this property is related to. GET /api/action/express-v1/branches.
typeintyesThe Id of property type. GET /api/action/express-v1/types
operationintyesThe Id of property operation. Constants
propertyTypestringyesThe translated description of the property type. GET /api/action/express-v1/types
propertyOperationstringyesThe translated description of the property operations. Constants
statusstringyesThe translated description of the building status. Constants
mainImagestringnoThe Id of property type. GET /api/action/express-v1/types
currencystringyesThe currency symbol of the price of the property. Constants
priceintyesThe price of the property
expensesCurrencystringnoThe currency symbol of the monthly / yearly expenses of the property. Constants
expensesPriceintnoThe price of the monthly / yearly expenses of the property
taxCurrencystringnoThe currency symbol of the monthly / yearly taxes of the property. Constants
taxPriceintnoThe price of the monthly / yearly taxes of the property
titlestringyesA title entered by the customer
addressstringyesThe street address and number of the property
zipCodestringyesThe postal code of property location
zonestringyesA friendly description combining from city (if available) to state
countryIdintyesThe ID of the property country location
stateIdintyesThe ID of the property state location. GET /api/action/express-v1/zones
countyIdintyesThe ID of the property county location. GET /api/action/express-v1/zones
cityIdintnoThe ID of the property city location. GET /api/action/express-v1/zones
countryIdintyesThe ID of the property country location. GET /api/action/express-v1/zones
countrystringyesThe name of the country
statestringyesThe name of the state
countystringyesThe name of the county or 2nd division location
citystringnoThe name of the city / neighborhood or 3rd division
suspendedbooleanyesThe publication has been suspended
reservedbooleanyesThe property has been reserved
rentedbooleanyesThe property has been rented
soldbooleanyesThe property has been sold
descriptionstringyesThe long description of the property
conditionsstringnoThe long conditions statement of the property. Usually related to payments
bedroomsintnoNumber of bedrooms of the property
ambiencesintnoThe number of ambiences / spaces for the property
bathroomsintnoNumber of bathrooms of the property
dependenciesintnoNumber of dependency rooms (extra rooms)
occupancyintnoNumber of occupants (generally if this is a temp rental)
toilettesintnoNumber of toilettes (half bathrooms) in the property
buildingAreaintnoSquare meters of the built area
landAreaintnoSquare meters of the land of the property
yearsOldintnoHow old the property is
ubicationstringnoThe property cardinal ubication in the building
totalFloorsintnoThe total floors in the building
apartmentsPerFloorintnoThe amount of apartments per floor
airConditionerTypestringnoType of air conditioner.
waterHeaterTypestringnoType of water heater.
heatingTypestringnoType of heating appliances.
balconyTypestringnoType of balcony.
garageintnoThe total garages of the property
garageTypestringnoType of garage.
imagesArray of ImagenoArray of Image object
locationLocationyesLocation object
LocationlonstringyesLongitude location of the property
latstringyesLatitude location of the property
ImageimagestringyesURL for image
thumbnailstringyesURL for the thumbail
orientationintyesOrientation of the image. 1 = PORTRAIT, 2 = LANDSCAPE
typeintyesType of image. 1 = PHOTO, 2 = BLUEPRINT
contentTypestringyesThe image content type
timestampstringyesThe ISO8601 timestamp of when the image was uploaded
LabelslabelsArray of labelsnoThe labels of property. Constants
attributesattributesArray of json attributesnoAll property attributes
descriptionFormatteddescriptionstringnoDescription with new formatting that accepts line breaks

The development's own fields

A development is a property with extra fields, and they are the ones that make it useful:

FieldTypeRequiredDescription
developmentbooleanyesAlways true in this service
developmentPropertiesArray of intnoThe Ids of the units that make up the development. They are the ones you pass to GET /development/properties to fetch the detail of each one
commercialTaglinestringnoThe project's commercial tagline, exactly as the agency entered it
deliveryDatestringnoDelivery date, in ISO8601 format with time zone
logoUrlstringnoURL of the development's logo. It is the project's logo, not the agency's
totalApartmentsintnoTotal homes in the project
totalTowersintnoTotal towers
totalElevatorsintnoTotal elevators
totalOfficesintnoTotal offices
totalCommercialUnitsintnoTotal commercial units
totalHousesintnoTotal houses
totalLotsintnoTotal lots

These are the values the agency declared for the project. They are not the result of counting the units in developmentProperties: a development may advertise 500 homes and have 12 loaded.

A 0 means "not declared", not "zero".

The seven counters are optional, and when the agency does not fill them in the service returns 0 instead of omitting them. So "totalTowers": 0 does not mean the project has no towers: it means nobody reported how many.

If you are going to display the value, treat 0 as absence. A site that publishes "0 towers" is stating something the agency never said.

This is the object's convention, not this group's: it applies the same way to the optional integers that already existed —totalFloors, floors, apartmentsPerFloor, toilettes, dependencies, expensesPrice and taxPrice—, which have always behaved this way.

The three non-numeric fields are OMITTED when empty.

commercialTagline, deliveryDate and logoUrl do not arrive as null: they simply are not in the JSON. It is the other half of the same convention, and you need both to read a response correctly: for the numeric ones you ask about the value, for these about the key's existence.

developmentStats — the figures DERIVED from the units

Since 2026-10-27 every development carries a developmentStats block with the indicators that come from counting its units. Nobody entered them: they are computed in the backend from the units linked to the development, and recomputed whenever one of them changes.

It is the other half of the previous group, and they have to be read together.

The seven counters (totalApartments, totalTowers…) are what the agency declared for the project. developmentStats is what is actually loaded. A development may advertise 500 homes (totalApartments: 500) and have 12 units loaded (developmentStats.units.total: 12). Both are true and they answer different questions.

"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 } }
}
BranchWhat it carries
unitshow many units there are and in what state. withOperation counts units, not states: one that is sold AND reserved counts once. availabilityRate is the percentage available out of the total
sale / rentcommercialization by operation, each measured against its own universe
otherOperationunits under barter, transfer, share or auction. They exist so that sale.units + rent.units + otherOperation.units adds up to the total and no unit disappears
buildingAreathe covered square metres. unavailable is an OR (sold ‖ reserved ‖ rented), so a unit with two states is deducted only once
prices.byCurrencythe breakdown by currency: from/to the range, total the sum, average the average
typologyhow many units there are by rooms, bedrooms, covered m² and total m². The keys are the value; the ones that are absent belong to no unit

A rate of null is NOT 0.

sale.rate and rent.rate come back as null when there is no unit under that operation: the question "how much of what is for sale has been placed?" has no answer if nothing is for sale, and a 0 % would be a false one. A 0 does mean something: there are units for sale and none has been placed.

In a rent-only development you will see sale.rate: null and a number in rent.rate. That is correct: they are two different businesses and they are not averaged together.

Prices have NO flat fields, and that is deliberate.

There is no prices.from, prices.to, prices.total or prices.average at the block level: only byCurrency. If a development has units in dollars and in pesos, any single figure mixing them is false, not approximate — an average of 120,000 USD and 95,000,000 ARS is neither dollars nor pesos.

mixedCurrencies tells you whether there is more than one. With a single currency — the usual case — the only bucket in byCurrency IS the development's figure: read it and you are done.

Only developments carry it. A regular property has no developmentStats at all: it has no units to derive it from, so the question does not exist. It is not a zeroed block — the key is absent.

It recomputes on its own. When a unit is sold, rented, changes price or area, or is deleted, the development's block is updated at that moment. There is nothing to request and no process to wait for.

developmentId — which development a property belongs to

Since 2026-10-26 every property carries developmentId: the Id of the development it belongs to, or 0 if it belongs to none.

FieldTypeRequiredDescription
developmentIdintyesId of the development this property is a unit of. 0 = it is not a unit of any development

It is the inverse of developmentProperties, and it completes the relation in both directions: with developmentProperties you go from the project to its units; with developmentId, from a unit back to its project.

A development can also have a developmentId. If it is a sub-development — a stage within a larger project — it will carry development: true, its own developmentProperties and the developmentId of its parent project. All three at once.

Additional fields

Each development also brings the same extra fields as a property —seoUrl, typeDesc, operationDesc, descriptionFormatted, publishedAt, floors, garages, branchSeoUrl, customerCountry, customerCountryDesc, videos, alternativePrices, reservations and tempOccupied— documented in GET /properties.

The response also includes fields for Mapaprop's internal use that are not part of this contract and may change without notice: embeddingVersion, vectorizedAt, configs, moderationStatus, publication and networks. Do not build anything on them.

Sample response

{
"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
        }
    ]
}