Este serviço retorna a lista de empreendimentos imobiliários da sua conta (a imobiliária dona do token). O escopo vem do access token, não é enviado como parâmetro.

Informações do recurso
AutenticaçãoObrigatória (Token de API, Bearer)
Scopeexpress-base
Método HTTPGET
RespostaJSON
Versão1

URL do recurso

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

Código de exemplo

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

ChaveTipoObrigatórioDescrição
customerIdintnoÉ ignorado. O escopo vem do access token: a busca é sempre delimitada à imobiliária dona do token, e um customerId enviado na consulta não tem nenhum efeito.
termstringnoTermo que tentará corresponder a pelo menos 3 caracteres na zona, endereço ou título do imóvel. Suporta busca de texto completo.
typeintnoSempre substituído por 23 (Desarrollo Inmobiliario) pela API. Qualquer valor enviado pelo usuário é ignorado. Constantes
operationintnoOperação do imóvel. Constantes
fromintnoNúmero do registro inicial. O padrão é 0.
sizeintnoQuantidade de registros a retornar por consulta. O padrão é 7. O máximo é 20 (erro de validação: "You cannot retrieve more than 20 properties at a time").
branchIdintnoID da filial onde os imóveis estão localizados.
stateIdintnoID do estado do imóvel.
countyIdintnoID do município do imóvel.
cityIdintnoID da cidade do imóvel.
tempOccupancyintnoNúmero de pessoas que podem se hospedar no imóvel.
dateFromstringnoData de chegada (formato: "dd-MM-yyyy").
dateTostringnoData de saída (formato: "dd-MM-yyyy").

Paginação

Este endpoint utiliza paginação por offset via os parâmetros from e size.

ParâmetroSignificadoPadrãoMáximo
fromOffset (base zero) do primeiro registro a retornar0—
sizeNúmero de registros retornados por requisição720

A resposta sempre inclui o campo total com o total de registros que correspondem aos seus filtros (não apenas os retornados na página atual). Use-o para saber quando parar de paginar.

Como paginar

Para obter a página N (índice 1) com um tamanho de página fixo:

from = (N - 1) * size

Continue solicitando a próxima página enquanto from + size < total.

Exemplo: paginar 25 empreendimentos, 20 por página

Suponha que uma busca retorne "total": 25. Para obter todos os resultados são necessárias 2 requisições:

Página 1 — registros 1 a 20:

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

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

Página 2 — registros 21 a 25:

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

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

Neste ponto from + size = 40 >= total = 25, portanto não há mais páginas.

Observações

  • Mantenha os filtros consistentes entre páginas. Alterar qualquer filtro entre requisições (por exemplo operation, stateId, dateFrom) reinicia o conjunto de resultados e seu offset apontará para uma coleção diferente.
  • size não pode ultrapassar 20. Solicitar size=21 ou mais retorna um erro de validação: "You cannot retrieve more than 20 properties at a time". Para recuperar conjuntos grandes é necessário paginar.
  • from é um offset, não um número de página. from=2 retorna registros a partir da posição 3, não a "página 2".
  • Os filtros numéricos esperam um número inteiro. Um valor fora do intervalo de um inteiro (por exemplo, um número de 20 dígitos) ou com decimais retorna um erro de validação em vez de ser ignorado silenciosamente.
  • O campo took indica o tempo em milissegundos que a busca levou no servidor para aquela página.

Resposta

Um documento JSON com a lista de zonas em hierarquia onde o cliente possui imóveis.

ObjetoCampoTipoObrigatórioDescrição
ResponsetookintyesTempo que a busca levou, em milissegundos
totalintyesTotal de registros no contexto desta busca. Você pode paginá-los
propertiesArray of PropertyyesA lista de objetos Property
PropertypropertyHashstringyesID único do imóvel
timestampstringyesTimestamp ISO8601 de quando o imóvel foi criado
lastUpdatestringyesTimestamp ISO8601 da última atualização do imóvel
codestringyesCódigo único do imóvel inserido pelo cliente
branchIdintyesID da filial associada a este imóvel. GET /api/action/express-v1/branches.
typeintyesId do tipo de imóvel. GET /api/action/express-v1/types
operationintyesId da operação do imóvel. Constantes
propertyTypestringyesDescrição traduzida do tipo de imóvel. GET /api/action/express-v1/types
propertyOperationstringyesDescrição traduzida da operação do imóvel. Constantes
statusstringyesDescrição traduzida do estado da construção. Constantes
mainImagestringnoId do tipo de imóvel. GET /api/action/express-v1/types
currencystringyesSímbolo de moeda do preço do imóvel. Constantes
priceintyesPreço do imóvel
expensesCurrencystringnoSímbolo de moeda das despesas mensais/anuais. Constantes
expensesPriceintnoValor das despesas mensais/anuais
taxCurrencystringnoSímbolo de moeda dos impostos mensais/anuais. Constantes
taxPriceintnoValor dos impostos mensais/anuais
titlestringyesTítulo inserido pelo cliente
addressstringyesEndereço e número do imóvel
zipCodestringyesCEP do imóvel
zonestringyesDescrição combinada desde a cidade (se disponível) até o estado
countryIdintyesID do país do imóvel
stateIdintyesID do estado do imóvel. GET /api/action/express-v1/zones
countyIdintyesID do município do imóvel. GET /api/action/express-v1/zones
cityIdintnoID da cidade do imóvel. GET /api/action/express-v1/zones
countryIdintyesID do país do imóvel. GET /api/action/express-v1/zones
countrystringyesNome do país
statestringyesNome do estado
countystringyesNome do município ou segunda divisão
citystringnoNome da cidade, bairro ou terceira divisão
suspendedbooleanyesA publicação foi suspensa
reservedbooleanyesO imóvel foi reservado
rentedbooleanyesO imóvel foi alugado
soldbooleanyesO imóvel foi vendido
descriptionstringyesDescrição longa do imóvel
conditionsstringnoCondições do imóvel. Geralmente relacionadas a pagamentos
bedroomsintnoNúmero de dormitórios
ambiencesintnoNúmero de ambientes ou espaços
bathroomsintnoNúmero de banheiros
dependenciesintnoNúmero de quartos de serviço
occupancyintnoNúmero de ocupantes (geralmente em aluguel temporário)
toilettesintnoNúmero de lavabos
buildingAreaintnoMetros quadrados de área construída
landAreaintnoMetros quadrados do terreno
yearsOldintnoIdade do imóvel
ubicationstringnoOrientação cardinal do imóvel no edifício
totalFloorsintnoTotal de andares do edifício
apartmentsPerFloorintnoQuantidade de apartamentos por andar
airConditionerTypestringnoTipo de ar-condicionado
waterHeaterTypestringnoTipo de aquecedor de água
heatingTypestringnoTipo de aquecimento
balconyTypestringnoTipo de varanda
garageintnoTotal de vagas de garagem
garageTypestringnoTipo de garagem
imagesArray of ImagenoArray de objetos Image
locationLocationyesObjeto Location
LocationlonstringyesLongitude geográfica do imóvel
latstringyesLatitude geográfica do imóvel
ImageimagestringyesURL da imagem
thumbnailstringyesURL do thumbnail
orientationintyesOrientação da imagem. 1 = PORTRAIT, 2 = LANDSCAPE
typeintyesTipo de imagem. 1 = PHOTO, 2 = BLUEPRINT
contentTypestringyesTipo de conteúdo da imagem
timestampstringyesTimestamp ISO8601 de quando a imagem foi enviada
LabelslabelsArray of labelsnoEtiquetas do imóvel. Constantes
attributesattributesArray of json attributesnoTodos os atributos do imóvel
descriptionFormatteddescriptionstringnoDescrição com nova formatação que aceita quebras de linha

Os campos próprios do empreendimento

Um empreendimento é um imóvel com campos extra, e são eles que o tornam útil:

CampoTipoObrigatórioDescrição
developmentbooleanyesSempre true neste serviço
developmentPropertiesArray of intnoOs Ids das unidades que compõem o empreendimento. São os que você passa para GET /development/properties para trazer o detalhe de cada uma
commercialTaglinestringnoA legenda comercial do projeto, tal como a imobiliária a cadastrou
deliveryDatestringnoData de entrega, no formato ISO8601 com fuso horário
logoUrlstringnoURL do logo do empreendimento. É o logo do projeto, não o da imobiliária
totalApartmentsintnoTotal de moradias do projeto
totalTowersintnoTotal de torres
totalElevatorsintnoTotal de elevadores
totalOfficesintnoTotal de escritórios
totalCommercialUnitsintnoTotal de lojas comerciais
totalHousesintnoTotal de casas
totalLotsintnoTotal de lotes

São os valores que a imobiliária declarou para o projeto. Não são o resultado de contar as unidades de developmentProperties: um empreendimento pode anunciar 500 moradias e ter 12 cadastradas.

Um 0 significa "não declarou", não "zero".

Os sete contadores são opcionais e, quando a imobiliária não os preenche, o serviço devolve 0 em vez de omiti-los. Portanto "totalTowers": 0 não quer dizer que o projeto não tenha torres: quer dizer que ninguém informou quantas.

Se você for exibir o dado, trate o 0 como ausência. Um site que publique "0 torres" está afirmando algo que a imobiliária nunca disse.

É a convenção do objeto, não deste grupo: aplica-se da mesma forma aos inteiros opcionais que já existiam —totalFloors, floors, apartmentsPerFloor, toilettes, dependencies, expensesPrice e taxPrice—, que sempre se comportaram assim.

Os três campos não numéricos são OMITIDOS quando estão vazios.

commercialTagline, deliveryDate e logoUrl não vêm em null: simplesmente não aparecem no JSON. É a outra metade da mesma convenção, e você precisa das duas para ler corretamente uma resposta: nos numéricos você pergunta pelo valor, nestes pela existência da chave.

developmentStats — os números DERIVADOS das unidades

A partir de 2026-10-27 cada empreendimento traz um bloco developmentStats com os indicadores que saem da contagem de suas unidades. Ninguém os carregou: são calculados no backend com base nas unidades vinculadas ao empreendimento, e recalculados quando uma delas muda.

É a outra metade do grupo anterior, e as duas têm que ser lidas juntas.

Os sete contadores (totalApartments, totalTowers…) são o que a imobiliária declarou para o projeto. developmentStats é o que está carregado. Um empreendimento pode anunciar 500 moradias (totalApartments: 500) e ter 12 unidades carregadas (developmentStats.units.total: 12). As duas coisas são verdadeiras e respondem perguntas diferentes.

"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 } }
}
RamoO que traz
unitsquantas unidades há e em que estado. withOperation conta unidades, não estados: uma vendida E reservada conta uma. availabilityRate é a porcentagem disponível sobre o total
sale / renta comercialização por operação, cada uma medida contra o seu próprio universo
otherOperationas unidades em permuta, trespasse, compartilhamento ou leilão. Existem para que sale.units + rent.units + otherOperation.units dê o total e nenhuma unidade desapareça
buildingAreaos m² construídos. unavailable é um OR (vendida ‖ reservada ‖ alugada), então uma unidade com dois estados é descontada uma única vez
prices.byCurrencyo detalhamento por moeda: from/to a faixa, total a soma, average a média
typologyquantas unidades há por ambientes, dormitórios, m² construídos e m² totais. As chaves são o valor; as que não aparecem não pertencem a nenhuma unidade

Um rate em null NÃO é 0.

sale.rate e rent.rate voltam em null quando não há nenhuma unidade dessa operação: a pergunta "quanto foi comercializado do que está à venda?" não tem resposta desde que não haja nada à venda, e um 0 % seria uma resposta falsa. Já um 0 significa algo: há unidades à venda e nenhuma foi colocada.

Em um empreendimento só de aluguéis você vai ver sale.rate: null e um número em rent.rate. Isso está correto: são dois negócios diferentes e não se tiram médias entre eles.

Os preços NÃO têm campos planos, e isso é de propósito.

Não existe prices.from, prices.to, prices.total nem prices.average no nível do bloco: apenas byCurrency. Se um empreendimento tem unidades em dólares e em pesos, qualquer número único que os misture é falso, não aproximado — uma média de 120.000 USD e 95.000.000 ARS não é nem dólares nem pesos.

mixedCurrencies informa dependendo de haver mais de uma. Com uma só — o caso habitual — o único balde de byCurrency É o dado do empreendimento: basta lê-lo.

Apenas os empreendimentos o trazem. Um imóvel comum não tem developmentStats de forma alguma: não tem unidades a partir das quais derivá-lo, por isso a pergunta não existe. Não é um bloco em zero — a chave não está.

Recalcula sozinho. Quando uma unidade é vendida, alugada, muda de preço, de área ou é excluída, o bloco do empreendimento é atualizado no mesmo momento. Não há nada a solicitar nem processo a esperar.

developmentId — de qual empreendimento um imóvel faz parte

A partir de 2026-10-26 todo imóvel traz developmentId: o Id do empreendimento ao qual pertence, ou 0 se não pertencer a nenhum.

CampoTipoObrigatórioDescrição
developmentIdintyesId do empreendimento do qual este imóvel é unidade. 0 = não é unidade de nenhum empreendimento

É o inverso de developmentProperties, e completa a relação nos dois sentidos: com developmentProperties você vai do projeto às suas unidades; com developmentId, de uma unidade de volta ao seu projeto.

Um empreendimento também pode ter developmentId. Se for um subempreendimento — uma etapa dentro de um projeto maior — vai trazer development: true, o seu próprio developmentProperties e o developmentId do projeto pai. As três coisas ao mesmo tempo.

Campos adicionais

Cada empreendimento traz também os mesmos campos extra que um imóvel —seoUrl, typeDesc, operationDesc, descriptionFormatted, publishedAt, floors, garages, branchSeoUrl, customerCountry, customerCountryDesc, videos, alternativePrices, reservations e tempOccupied— documentados em GET /properties.

A resposta inclui também campos de uso interno da Mapaprop que não fazem parte deste contrato e podem mudar sem aviso: embeddingVersion, vectorizedAt, configs, moderationStatus, publication e networks. Não construa nada sobre eles.

Resposta de exemplo

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