DEVELOPING

Connect with a link

Some portals do not hand you a credential for your client's account. The agency has to go into the portal and authorize it themselves, and the authorization stays stored on the portal's side.

For those cases you request a connection link, send it to your client, and they complete the step on a page of ours. When they finish, the connection is registered and you can publish on their behalf.

MethodPathWho calls it
POST/property-v1/connect-linksYou, with your token
GET/property-v1/connect-links/{token}The page your client sees
POST/property-v1/connect-links/{token}/confirmThe page your client sees

The last two are public: they are used by the page, not by your application. They are documented so you understand the flow, not for you to call them.

These endpoints are under development. Write to dev@mapaprop.com if your integration needs them.

When to use this path and when not to

PortalHow to connect
Zonaprop (zonapropapi)Here. It does not issue a per-account credential
Argenprop, Cabaprop, MercadoLibrePortal connections — you obtain the token and store it

Today only Zonaprop uses this flow. Requesting a link for another portal returns 400.

Before you start: declare your client

The link is issued for an already declared client record. If you have not created it, you get 409.

That is because the code your client uses to identify itself to the portal is assigned by us when the record is created (MAPAPROP-PA-000123). Your client does not need anything in the portal beforehand other than their account.

See Clients.

FieldTypeRequiredDescription
portalstringyesToday only zonapropapi
clientRefstringyes*Your client id. *Can be sent via the x-client-ref header
curl -X POST https://property-api.mapaprop.com/property-v1/connect-links \
  -H "Authorization: Bearer <YOUR_TOKEN>" \
  -H "x-client-ref: cliente-42" \
  -H "Content-Type: application/json" \
  -d '{ "portal": "zonapropapi" }'

Response 201:

{
  "token": "x-_qM7tYl3TnjxIyxTCmX2Y6dfuD1uiSYO8VX3M3jZE",
  "portal": "zonapropapi",
  "expiresAt": "2026-10-08T17:51:44.000Z",
  "url": "https://www.mapaprop.com/property-api/connect/zonapropapi/x-_qM7tYl3Tnjx..."
}

Use the url exactly as it comes. Do not build it yourself: if we move the page, the links you already sent would break.

The link is valid once and lasts 7 days. Once your client completes the connection, the link is consumed. To reconnect — for example if they disconnected — request a new one.

Requires the property-api-create scope.

2. Send it to your client

By email, through your panel, however you prefer. The page shows them their agency's name so they can verify they are connecting the right account, and explains that they will sign in with their portal credentials — not their Mapaprop ones.

What happens there: your client authorizes in the portal, and the page asks the portal whether the authorization was actually registered before treating the connection as done. It is not enough for the portal to say yes on screen.

3. Find out that it finished

We do not notify you. When your client completes the step, check the status:

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

status: "active" means connected. That call does not consume portal quota: it reads our own record.

Your application's button

With this you can draw a single button that works both for connecting and disconnecting:

StepCallDoes it consume portal quota?
Decide which button to showGET /connections/{portal}no
Click on ConnectPOST /property-v1/connect-links → open the urlno
Your client authorizes—yes, 1
Click on DisconnectDELETE /connections/{portal}yes, 1

status: "active" → show Disconnect. revoked or 404 → show Connect.

Check status, not whether the connection exists. GET /connections also returns revoked connections: we keep the record so the client can reconnect. If your code does if (connections.length > 0) it will treat a disconnected client as connected.

Request the link when your client clicks the button, not when you draw it. If you request it on every screen load, you generate links nobody uses.

For Zonaprop, also see: monthly quota and limits.

Error responses

CodeWhenWhat to do
400The portal does not support this flowToday only zonapropapi
409You did not declare the client recordCreate it with POST /property-v1/customers
404The link does not existCheck that it is complete
410The link expired (7 days)Request a new one
409 not_authorized_yetYour client has not completed the authorization yetHave them finish the step in the portal

What your client sees

The page is ours, it does not carry your branding or Mapaprop's beyond a footer, and it has no navigation: it does not invite them to go anywhere else. It shows their agency's name, explains what they are authorizing, and opens the portal's window.

If it completes successfully, it tells them they can close it. If the portal has not registered the authorization yet, it says so and lets them try again.

We never ask for their portal credentials: they enter those on the portal's own site, in their own window.