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 doing | Use | Why |
|---|---|---|
| Mapping your entire catalog, once, on your side | The complete list | You download every zone in the country and cross-reference it against yours without round trips |
| Resolving a specific branch (one province, one district) | The cascade | Three 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.
| Code | What it is | Publishable? |
|---|---|---|
1-2-201-0 | La Matanza (the entire district) | Yes |
1-2-201-117 | Aldo Bonzi (a locality within La Matanza) | Yes |
1-1-49-0 | Palermo 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
zone1and then byzone2. You do not need to split thepathor 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
- The complete list of zones — for batch mapping
- The cascade — for resolving a branch
- The property JSON object — where the code goes
- POST /properties/verify — test your object before publishing