DEVELOPING

Conexões com portais

Se a sua aplicação publica imóveis em portais através da PropertyAPI, cada cliente seu precisa ter conectada a sua própria conta do portal. Estes endpoints administram essas conexões.

MétodoRotaO que faz
POST/connectionsRegistra a conexão de um cliente com um portal
GET/connectionsLista as conexões de um cliente
GET/connections/{portal}Devolve uma conexão
DELETE/connections/{portal}Desvincula a conexão

Estes endpoints estão em desenvolvimento. Escreva para dev@mapaprop.com se a sua integração precisar deles.

Antes de começar

O token da conta do portal é você quem obtém. Estes endpoints não fazem o login no portal: eles guardam a credencial que o seu cliente já autorizou você a usar. Cada portal tem o seu próprio mecanismo de conexão.

Você precisa de um scope para cada portal. Os scopes são concedidos no momento de registrar a sua aplicação; escreva para nós indicando com quais portais você vai trabalhar.

Valores de portal

PortalValorScope necessário
ArgenpropArgenpropApiargenpropapi:connect
CabapropCabapropApicabapropapi:connect
MercadoLibreMercadolibreApimercadolibreapi:connect
ZonapropZonapropApizonapropapi:connect

Não diferencia maiúsculas de minúsculas: ArgenpropApi, argenpropapi e ARGENPROPAPI são o mesmo portal e a mesma conexão. As respostas sempre devolvem o valor em minúsculas (argenpropapi), então não estranhe se ele aparecer diferente da forma como você o enviou.

No Zonaprop o sufixo Api importa: o portal também tem um feed XML, e estes endpoints são apenas para a integração por API.

Identificar o seu cliente: clientRef

clientRef é o identificador que você escolhe para cada um dos seus clientes finais. É opaco para nós: pode ser o seu id interno, um UUID ou o que você usar. Você o envia no cabeçalho x-client-ref (ou na query, ou no corpo do POST).

As suas conexões vivem em um espaço próprio: nenhuma outra aplicação pode lê-las nem alterá-las, e você também não alcança as de outra. Isso é determinado pelo seu token, não pelo que você enviar na requisição.

Uma conta de portal = um dono

Uma mesma conta de portal não pode estar conectada por duas aplicações ao mesmo tempo. Se você tentar registrar uma conta que já está conectada por outra, recebe 409. É isso que permite direcionar sem ambiguidade as consultas que chegam do portal.

POST /connections

Registra a conexão. Se você chamá-lo novamente para o mesmo cliente e portal, ele atualiza a conexão existente (é a forma de rotacionar o token).

CampoTipoObrigatórioDescrição
portalstringsimVer Valores de portal
portalAccountIdstring ou númerosimId da conta no portal. Diferencia maiúsculas
accountTokenstringsimCredencial da conta. Máximo 4096 bytes
clientRefstringsim*O seu id de cliente. *Pode ser enviado pelo cabeçalho
tokenExpiresAtnúmero ou nullnãoVencimento em epoch, se o portal informar
scopesGrantedarray de stringnãoPermissões que o cliente concedeu a você. Até 32
providerMetaobjetonãoDados seus. Máximo 8192 bytes serializado
curl -X POST https://property-api.mapaprop.com/connections \
  -H "Authorization: Bearer <TU_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "portal": "ArgenpropApi",
    "portalAccountId": "310578",
    "accountToken": "<credencial de la cuenta>",
    "clientRef": "inmobiliaria-42"
  }'

Resposta 201:

{
  "connection": {
    "portal": "argenpropapi",
    "portalAccountId": "310578",
    "status": "active",
    "scopesGranted": [],
    "createdAt": "2026-09-04T13:40:00.000Z",
    "lastActivityAt": "2026-09-04T13:40:00.000Z",
    "tokenExpiresAt": null,
    "providerMeta": {}
  }
}

O accountToken nunca mais sai. Ele é guardado criptografado e nenhum endpoint o devolve, nem mesmo criptografado. Guarde-o você, caso precise dele para outra coisa.

GET /connections

Lista as conexões do cliente. Só devolve os portais para os quais você tem scope: se você trabalha com Argenprop e o seu cliente também tem uma conexão de outro portal, essa não aparece.

curl https://property-api.mapaprop.com/connections \
  -H "Authorization: Bearer <TU_TOKEN>" \
  -H "x-client-ref: inmobiliaria-42"

Resposta 200: { "connections": [ ... ] }, com os mesmos campos do POST.

GET /connections/{portal}

Devolve uma conexão. 404 se esse cliente não a tiver.

DELETE /connections/{portal}

Desvincula a conexão: apagamos a credencial guardada e a conta deixa de receber consultas do portal através de nós.

Não mexemos nos anúncios publicados no portal. Os anúncios são do seu cliente e continuam online exatamente como estavam. Desvincular corta o nosso acesso, nada mais. Se o seu cliente quiser tirar os anúncios do ar, precisa fazer isso no portal.

É idempotente: desvincular algo já desvinculado responde 200 do mesmo jeito.

{ "status": "revoked", "alreadyRevoked": false, "externalListingsUntouched": true }

Erros

CódigoerrorO que aconteceu
400portal is required / portal must be a non-empty stringFalta o portal ou ele não é texto
400Invalid JSON bodyO corpo não é um JSON válido
400clientRef is required (header x-client-ref, query or body)Falta identificar o cliente
400(vários, com field)Um campo não cumpre o formato ou ultrapassa um máximo
401UnauthorizedFalta o token ou ele não é válido
403Missing required scope: argenpropapi:connectA sua aplicação não tem o scope desse portal
404Connection not foundEsse cliente não tem conexão com esse portal
409portal account already connectedEssa conta de portal já está conectada por outra aplicação
503Connection storage is temporarily unavailable (encryption backend)Problema temporário nosso. Tente novamente

Um 403 informa exatamente qual scope está faltando, e esse texto inclui o portal tal como você o enviou. Se você vir Missing required scope: argenprop:connect em vez de argenpropapi:connect, o problema é o valor de portal, não as suas permissões.