BETA

Zones

Your system stores each property with your zones. Ours expects ours. Before sending us the first property you need an equivalence table —"my zone 4471 is Mapaprop's 1-1-49-0"— that you build once and then reuse on every submission.

This page explains how to build it. There are two ways to request zones from us, and which one suits you depends on what you are doing.

The two ways, and when to use each

What you are doingUseWhy
Mapping your entire catalog, once, on your sideThe complete listYou download every zone in the country and cross-reference it against yours without round trips
Resolving a specific branch (one province, one district)The cascadeThree small calls instead of downloading thousands of rows

Using both is normal: the list for the initial mapping, the cascade for specific lookups afterwards.

The catalog is downloaded once and stored. This is not an endpoint to call on every property submission: zones change very little. Store the result on your side and refresh it occasionally — the endpoint helps you with that, see caching and ETag.

The zone code: four segments, always

Every zone has a code, and that code is the only thing that travels in the property object:

1-2-201-0
│ │  │  └─ zone3 — locality / neighborhood  (0 if you do not go down to that level)
│ │  └──── zone2 — district / municipality
│ └─────── zone1 — province / state
└───────── zone0 — country

Always four segments, even when there is no zone3. When you do not go down to the last level, a 0 goes there — it is not omitted. 1-1-49 is not a valid code; the valid one is 1-1-49-0.

The four numbers also come separately in each row (zone0, zone1, zone2, zone3), so you can fill the object without splitting the string.

What a publishable zone is

This is the part that surprises most people, and it is worth understanding before you map:

Leaves of the tree are not the only publishable zones. The district is publishable on its own too.

CodeWhat it isPublishable?
1-2-201-0La Matanza (the entire district)Yes
1-2-201-117Aldo Bonzi (a locality within La Matanza)Yes
1-1-49-0Palermo Hollywood (a Buenos Aires neighborhood, with no level beneath it)Yes

If you know the exact locality, send the locality. If you only know the district, send the district with a trailing -0: it is a valid address and you do not need to invent a locality.

Every row carries a level field telling you which of the two it is (2 = district, 3 = locality).

How to cross-reference against your zones

Every row carries the ancestor names as fields of their own, in addition to the assembled path:

{
  "code": "1-2-201-117",
  "zone0": 1, "zone1": 2, "zone2": 201, "zone3": 117,
  "level": 3,
  "description": "Aldo Bonzi",
  "zone1Description": "Buenos Aires",
  "zone2Description": "La Matanza",
  "path": "Buenos Aires > La Matanza > Aldo Bonzi"
}
  • To match by text against your own names, use path: it includes the ancestry, which is what disambiguates. There are dozens of "San Martín" in Argentina; there is one "Buenos Aires > San Martín".
  • To build a tree on your side, group by zone1 and then by zone2. You do not need to split the path or call the cascade: the flat list already carries everything.

Store the code, not the name. Names can be corrected (an accent, an abbreviation); the code does not change. If your mapping relies on the text, one day it breaks on its own.

Countries

First of all you need to know which number your country is, because everything else asks for it:

GET https://mapaprop.app/api/action/property-catalog-v1/countries

No parameters. It returns the countries with their ISO code and their id (the zone0):

[
  { "id": 1, "iso": "AR", "description": "Argentina" },
  { "id": 2, "iso": "ES", "description": "España" }
]

In every other endpoint the country travels as its ISO code (country=AR), not as a number.

Authentication

The whole catalog requires Authorization: Bearer {your access_token} with the property-api-catalog scope.

The catalog is served from mapaprop.app/api/action/…, not from property-api.mapaprop.com. They are two hosts and that is deliberate: the catalog lives where the data lives. The token is the same for both, you do not need separate credentials.

If you get a 403, it is the token or the scope; if you get a 404, it is the method or the URL (all of these endpoints are GET).

See also