DEVELOPING

Enquiries for a single property

GET /property-v1/properties/{paId}/leads?portal={portal}

Returns the enquiries for one listing, the one belonging to the property you specify.

To pull everything, use the whole-account method. Walking through your properties one by one spends one call from the allowance for each one, and with the other method they all come in a single call. This method is for when you want to look at just one — the detail view of a listing in your panel.

curl "https://property-api.mapaprop.com/property-v1/properties/01M41AQNXYG4W4SEEEEPHEDNX4/leads?portal=zonapropapi&fromDate=20260101" \
  -H "Authorization: Bearer $TOKEN" \
  -H "x-client-ref: cliente-42"

The parameters

portalrequiredzonapropapi
fromDatefrom which date, YYYYMMDDif you omit it, the last 7 days
toDateup to which date, YYYYMMDDhere it is applied
sizehow many leads at most100

Always send fromDate whenever you want more than the very recent. Without an explicit window the portal uses one of its own, a very narrow one: the same listing that returns 8 enquiries with a fromDate nine months back returns 1 without the parameter. If you omit it, the listing looks as though it had almost no enquiries.

The response

{
  "portal": "zonaprop",
  "paId": "2605257",
  "from": "20260101",
  "to": "20260601",
  "leads": [
    {
      "id": "322337250",
      "propertyCode": "2605257___mapaprop",
      "name": "Lucía",
      "email": "lucia@ejemplo.com",
      "phone": "1156781234",
      "message": "Hola, quería coordinar una visita",
      "date": 1790878040000,
      "portalMessageId": null,
      "portalAdId": 56801168,
      "portalContactId": 49474924,
      "portalActionId": 10
    }
  ],
  "total": 8,
  "quota": { "remaining": 1346, "limit": 1500 }
}

It is the same shape as the whole-account method, plus the paId you requested. The lead object, field by field, is in the introduction.

to only appears if you sent toDate — and it appears because here the filter was applied.

If the listing is not on the portal

This is not an error: it is 200, with an empty list and the reason.

{
  "portal": "zonaprop",
  "paId": "01M41AQNXYG4W4SEEEEPHEDNX4",
  "from": "20260929",
  "leads": [],
  "total": 0,
  "notPublishedOnPortal": true,
  "detail": "Ese aviso no figura en esa inmobiliaria del portal, así que no tiene consultas. Puede que todavía no se haya publicado, que el portal lo haya dado de baja, o que esté publicado bajo otra cuenta.",
  "quota": { "remaining": 1346, "limit": 1500 }
}

The portal tells us "that listing does not appear under this agency" and nothing more, so we cannot tell you which of the three reasons it is. We would rather name all three than pick one and risk sending you to look where it is not.

The property does exist in your inventory — if it did not, the response would be a 404.

The errors

WhenWhat to do
400 portal_requerido?portal= is missingsend it
403you are missing the {portal}:leads scopeask us to grant it
404 property_not_foundthat paId is not in your inventorycheck the id. It does not spend allowance: we stop before asking the portal
409 portal_not_connectedthat account is not connected to that portalconnect it
409 portal_account_unlinkedit was unlinked on the portal's sideit has to be connected again
429 portal_quota_exhaustedthe agency used up its monthly allowancewait for the following month. The allowance is shared with publishing — see Zonaprop's allowance
501 leads_no_soportadothat portal does not offer this service yet—
502 portal_rejectedthe portal did not answer or rejected the requestretrying is safe