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.
| Method | Path | Who calls it |
|---|---|---|
POST | /property-v1/connect-links | You, with your token |
GET | /property-v1/connect-links/{token} | The page your client sees |
POST | /property-v1/connect-links/{token}/confirm | The 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
| Portal | How to connect |
|---|---|
Zonaprop (zonapropapi) | Here. It does not issue a per-account credential |
| Argenprop, Cabaprop, MercadoLibre | Portal 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.
1. Request the link
| Field | Type | Required | Description |
|---|---|---|---|
portal | string | yes | Today only zonapropapi |
clientRef | string | yes* | 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:
| Step | Call | Does it consume portal quota? |
|---|---|---|
| Decide which button to show | GET /connections/{portal} | no |
| Click on Connect | POST /property-v1/connect-links → open the url | no |
| Your client authorizes | — | yes, 1 |
| Click on Disconnect | DELETE /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
| Code | When | What to do |
|---|---|---|
400 | The portal does not support this flow | Today only zonapropapi |
409 | You did not declare the client record | Create it with POST /property-v1/customers |
404 | The link does not exist | Check that it is complete |
410 | The link expired (7 days) | Request a new one |
409 not_authorized_yet | Your client has not completed the authorization yet | Have 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.