DEVELOPING

Conexiones a portales

Si tu aplicación publica propiedades en portales a través de PropertyAPI, cada cliente tuyo necesita tener conectada su propia cuenta del portal. Estos endpoints administran esas conexiones.

MétodoRutaQué hace
POST/connectionsRegistra la conexión de un cliente con un portal
GET/connectionsLista las conexiones de un cliente
GET/connections/{portal}Devuelve una conexión
DELETE/connections/{portal}Desvincula la conexión

Estos endpoints están en desarrollo. Escribinos a dev@mapaprop.com si tu integración los necesita.

Antes de empezar

El token de la cuenta del portal lo obtenés vos. Estos endpoints no hacen el login contra el portal: guardan la credencial que tu cliente ya te autorizó a usar. Cada portal tiene su propio mecanismo de conexión.

Necesitás un scope por cada portal. Los scopes se otorgan al registrar tu aplicación; escribinos indicando con qué portales vas a trabajar.

Valores de portal

PortalValorScope necesario
ArgenpropArgenpropApiargenpropapi:connect
CabapropCabapropApicabapropapi:connect
MercadoLibreMercadolibreApimercadolibreapi:connect
ZonapropZonapropApizonapropapi:connect

No distingue mayúsculas de minúsculas: ArgenpropApi, argenpropapi y ARGENPROPAPI son el mismo portal y la misma conexión. Las respuestas siempre devuelven el valor en minúsculas (argenpropapi), así que no te sorprenda que salga distinto de como lo mandaste.

En Zonaprop el sufijo Api importa: el portal tiene también un feed XML, y estos endpoints son sólo para la integración por API.

Identificar a tu cliente: clientRef

clientRef es el identificador que vos elegís para cada uno de tus clientes finales. Es opaco para nosotros: puede ser tu id interno, un UUID o lo que uses. Lo mandás en el header x-client-ref (o en la query, o en el body del POST).

Tus conexiones viven en un espacio propio: ninguna otra aplicación puede leerlas ni tocarlas, y vos tampoco alcanzás las de otra. Eso lo determina tu token, no lo que mandes en el request.

Una cuenta de portal = un dueño

Una misma cuenta de portal no puede estar conectada por dos aplicaciones a la vez. Si intentás registrar una cuenta que ya está conectada por otra, recibís 409. Esto es lo que permite dirigir sin ambigüedad las consultas que llegan del portal.

POST /connections

Registra la conexión. Si volvés a llamarlo para el mismo cliente y portal, actualiza la conexión existente (es la forma de rotar el token).

CampoTipoRequeridoDescripción
portalstringsíVer Valores de portal
portalAccountIdstring o númerosíId de la cuenta en el portal. Distingue mayúsculas
accountTokenstringsíCredencial de la cuenta. Máximo 4096 bytes
clientRefstringsí*Tu id de cliente. *Se puede mandar por header
tokenExpiresAtnúmero o nullnoVencimiento en epoch, si el portal lo informa
scopesGrantedarray de stringnoPermisos que te dio el cliente. Hasta 32
providerMetaobjetonoDatos tuyos. 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"
  }'

Respuesta 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": {}
  }
}

El accountToken nunca vuelve a salir. Se guarda cifrado y ningún endpoint lo devuelve, ni siquiera cifrado. Guardalo vos si lo necesitás para otra cosa.

GET /connections

Lista las conexiones del cliente. Sólo devuelve los portales para los que tenés scope: si trabajás con Argenprop y tu cliente además tiene una conexión de otro portal, esa no aparece.

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

Respuesta 200: { "connections": [ ... ] }, con los mismos campos del POST.

GET /connections/{portal}

Devuelve una conexión. 404 si ese cliente no la tiene.

DELETE /connections/{portal}

Desvincula la conexión: borramos la credencial guardada y la cuenta deja de recibir consultas del portal a través nuestro.

No tocamos los avisos publicados en el portal. Los avisos son de tu cliente y siguen online exactamente como estaban. Desvincular corta nuestro acceso, nada más. Si tu cliente quiere dar de baja sus avisos, tiene que hacerlo en el portal.

Es idempotente: desvincular algo ya desvinculado responde 200 igual.

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

Errores

CódigoerrorQué pasó
400portal is required / portal must be a non-empty stringFalta el portal o no es texto
400Invalid JSON bodyEl cuerpo no es JSON válido
400clientRef is required (header x-client-ref, query or body)Falta identificar al cliente
400(varios, con field)Un campo no cumple el formato o supera un máximo
401UnauthorizedFalta el token o no es válido
403Missing required scope: argenpropapi:connectTu aplicación no tiene el scope de ese portal
404Connection not foundEse cliente no tiene conexión con ese portal
409portal account already connectedEsa cuenta de portal ya está conectada por otra aplicación
503Connection storage is temporarily unavailable (encryption backend)Problema temporal nuestro. Reintentá

Un 403 te dice exactamente qué scope falta, y ese texto incluye el portal tal como lo mandaste. Si ves Missing required scope: argenprop:connect en lugar de argenpropapi:connect, el problema es el valor de portal, no tus permisos.