The development JSON object
A real estate development —a building under construction, a gated community, a tower in the works— is
sent with the same endpoint as a property: POST /property-v1/properties. There is no separate
endpoint and no new model to learn.
What turns it into a development is a development group inside the object:
{
"code": "TORRE-NORTE",
"type": 23,
"operation": 1,
"title": "Torre Norte — Development under construction",
// … the rest of the usual fields …
"development": {
"totalBuildingArea": 7400,
"totalFloors": 12,
"apartmentsPerFloor": 4,
"units": ["TORRE-NORTE-4B", "TORRE-NORTE-5A"]
}
}
Two rules worth having clear from the start:
type has to be 23 | That is "Real Estate Development" in our type catalog. Sending the group with any other type is a contract error, and we tell you: we do not guess which of the two you meant |
| The presence of the group IS the signal | No flag is needed. An empty development ({}) already declares the object as a development |
1. The fields of the development group
They all describe the project, not a unit.
| Field | What it is | Required |
|---|---|---|
totalBuildingArea | Covered square metres of the development | yes |
totalLandArea | Total square metres of the land | yes |
totalGarages | Parking spaces of the development | yes |
minAmbiences | Rooms from — the minimum across the units | yes |
minRooms | Bedrooms from | yes |
minBathrooms | Full bathrooms from | yes |
units | The units. See section 2 | no |
totalApartments | Number of apartments | no |
totalFloors | Floors of the building | no |
apartmentsPerFloor | Apartments per floor | no |
totalElevators | Number of elevators | no |
totalOffices | Number of offices | no |
totalCommercialUnits | Number of commercial units | no |
totalTowers | Number of towers | no |
totalHouses | Number of houses. For a gated community | no |
totalLots | Number of lots. For a gated community | no |
deliveryDate | Delivery date | no |
logoUrl | Development logo | no |
commercialTagline | Commercial tagline | no |
The total* ones are about the whole project; the min* ones are the "from" the listing shows.
If a required field is missing, the error names it by its path in your JSON (
development.minRooms): something you can look up literally in what you sent.
⚠️
totalHouses/totalLotsand the building fields do not coexist. A gated community is described with houses and lots; a building with floors, apartments per floor and elevators. If you send fields from both sides we return the conflict naming the fields on each one, so you keep only one set.
2. The units: units
The units are regular properties belonging to that same client of yours, already created. In the development you only reference them:
"units": ["TORRE-NORTE-4B", "TORRE-NORTE-5A", "01M43Y1T192XEXJCV6Y6C4QTNB"]
You can use the code you gave them or the paId we returned when you created them. Both work,
and in the response we return both so you can cross-reference against your own database.
Order matters: the units first, the development afterwards
A unit has to exist before you reference it. The flow is:
POST /propertiesfor each unit → keep itspaIdPOST /propertiesfor the development, with their codes inunits
A development can be born without units
units is optional. You can create the development empty and load its units later with PUT: that is
the normal flow when the project goes on sale before the unit mix is settled.
⚠️ PUT replaces the complete list, it does not append. If the development has 10 units and you send
a PUT with 3, it ends up with 3 — the other 7 are released. Always send the entire list.
The limit: 100 units that CHANGE, not that it has
A single operation can move up to 100 units. What counts are the ones coming in and going out, not the ones the development already has: a unit that was already its own and stays so costs nothing.
That is why "always send the entire list" and the limit coexist. With a development of 150:
| You do | Units moved | |
|---|---|---|
PUT with the same 150 | 0 | ✅ |
PUT with 150, of which 1 is new | 1 | ✅ |
PUT with 149 (you remove one) | 1 | ✅ |
POST creating it with all 150 at once | 150 | ❌ 400 too_many_units_in_one_operation |
The only case that does not fit is loading more than ~92 new units in a single operation. It is solved in two steps and then never gets in the way again:
POST /properties → the development with the first 90
PUT /properties/{paId} → the list of 150
From then on you can PUT the 150 as many times as you want: none of them moves.
The seven unit rules
A unit that fails one of these is reported to you with its reason, and the development is saved anyway: what you cannot do is publish it.
| If… | We tell you |
|---|---|
| the code does not exist, or the property is deleted | not_found |
| you sent the same code twice in the same list | duplicate |
the string could be a code and a paId of two different properties | ambiguous — disambiguate with the paId |
| the unit already belongs to another development | already_in_development |
| you listed the development as a unit of itself | self_reference |
| the unit contains the development (directly or indirectly) | cycle |
| the chain of developments is too deep to verify | unverifiable_depth |
A unit belongs to a single development. If you want to move it, remove it from the previous one first.
📌 A development can be a unit of another one (a community with towers inside). In that case it counts as one unit: we do not descend into its children's units, because adding the child and its units would count the same thing twice.
3. Amenities specific to the development
A development uses the same attributes as any property, and on top of that it has 16 amenities of its
own: the ones belonging to the complex, not to a unit. A gym or a golf course belong to the development;
the air conditioning belongs to the apartment.
They come in the catalog with group_subtype: "development":
clubhouse Clubhouse | gym Gym | spa Spa |
golf-course Golf course | sports-court Sports court | sauna Sauna |
equestrian Equestrian facilities | sports-school Sports school | solarium Solarium |
playground Playground | micro-cinema Screening room | restaurant Restaurant |
medical-center Medical center | school School | commercial-area Commercial area |
maid-service Maid service |
They are booleans and are sent in attributes just like the rest, with nothing special about them:
"attributes": [
{ "id": "gym", "key_legacy": "gym", "group_sub": "label", "group_subtype": "development", "selected": true },
{ "id": "clubhouse", "key_legacy": "clubhouse", "group_sub": "label", "group_subtype": "development", "selected": true }
]
They exist in all 15 countries. Download them from the catalog along with the rest —do not write them
by hand— and filter by group_subtype:
GET /property-attributes — the complete catalog: types, operations, states and amenities
4. The complete object
This is a whole development, with all its fields. It is the object we use for testing.
{
"code": "DEV-TORRE-NORTE",
"type": 23,
"development": {
"totalBuildingArea": 126,
"totalLandArea": 189,
"totalGarages": 2,
"minAmbiences": 2,
"minRooms": 3,
"minBathrooms": 1,
"units": [
"TORRE-NORTE-4B",
"TORRE-NORTE-5A",
"TORRE-NORTE-PH-A"
],
"totalFloors": 12,
"apartmentsPerFloor": 4,
"totalApartments": 96,
"totalTowers": 3,
"totalElevators": 4,
"totalOffices": 2,
"totalCommercialUnits": 3,
"deliveryDate": "2027-06-30",
"logoUrl": "https://cdn.inmobiliaria-modelo.com/torre-norte/logo.png",
"commercialTagline": "Torre Norte — 96 unidades frente al parque, entrega 2027"
},
"operation": 1,
"title": "Torre Norte — desarrollo de 48 unidades en Nordelta",
"address": "Av. Santa Fe 4271",
"mapLatitude": -34.5828,
"mapLongitude": -58.4206,
"zone0": 1,
"zone1": 2,
"zone2": 189,
"description": "Desarrollo de 48 unidades distribuidas en 12 pisos, con amenities completos. Unidades de 1, 2 y 3 ambientes.",
"descriptionFormatted": "<p>Desarrollo de 48 unidades distribuidas en 12 pisos, con amenities completos.</p>",
"zipcode": "1684",
"betweenStreets": "Entre Av. Pueyrredón y Av. Coronel Díaz",
"urlWebExternal": "https://ejemplo-inmobiliaria.com/propiedad-dev",
"conditions": "Contado",
"yearsOld": 16,
"floors": 2,
"dependencies": 1,
"toilettes": 2,
"currency": "USD",
"price": 120000,
"zone3": 973,
"rented": false,
"sold": false,
"reserved": false,
"suspended": false,
"occupancy": null,
"images": [
{
"url": "https://images.mapaprop.app/photos/1/33616/213831.jpg",
"description": "Imagen principal",
"main": true
},
{
"url": "https://images.mapaprop.app/photos/1/33616/1950514.jpg",
"description": "Imagen 2",
"main": false
},
{
"url": "https://images.mapaprop.app/photos/1/33616/1950515.jpg",
"description": "Imagen 3",
"main": false
}
],
"blueprint": {
"url": "https://images.mapaprop.app/photos/1/33616/1950516.jpg"
},
"videos": [
{
"source": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"description": "Recorrido"
}
],
"prices": {
"expensesCurrency": "ARS",
"expensesPrice": 500,
"taxCurrency": "ARS",
"taxPrice": 200,
"paymentPeriod": 1
},
"altPrices": [
{
"description": "Alquiler por semana",
"currency": "ARS",
"price": 100000
}
],
"publication": {
"api": {
"argenprop": {
"advertiserId": 99999,
"visible": true,
"token": "<tu-token-de-argenprop>"
},
"zonaprop": {
"plan": {
"plan": "DESARROLLOS_DESTACADO"
},
"developmentCategory": "vertical",
"token": "<tu-token-de-zonaprop>"
},
"cabaprop": {
"branchOfficeId": 42,
"token": "<tu-token-de-cabaprop>"
},
"mercadolibre": {
"listingTypeId": "gold_special",
"condition": "used",
"token": "<tu-token-de-mercadolibre>"
}
}
},
"attributes": [
{
"locale": "es_AR",
"country": "ar",
"id": "accessible",
"label": "Accesible",
"group": "propertyAttribute",
"group_sub": "label",
"group_subtype": "ammenities",
"type": "bool",
"key_legacy": "accessible",
"selected": true,
"status": true
},
{
"locale": "es_AR",
"country": "ar",
"id": "statusUnderConstruction",
"label": "En Construcción",
"group": "propertyStatus",
"group_sub": "status",
"type": "list",
"key_legacy": "6",
"value": 6
},
// … and 54 more entries, one per development attribute
]
}
5. And next
POST /properties/verify for a development — try the object out before creating anything
developmentStats — the calculated numbers of its units
The property JSON object — the usual fields, which a development also carries