Resales Online

Search, fetch, and check connection status for Resales Online inventory through the Fondaro API.

The Resales Online endpoints proxy searches against the Resales Online MLS using the credentials your organization has stored under Integrations. Results are always live; nothing is cached in Fondaro's database.

Every endpoint requires a valid Clerk session and an active organization. If your organization has not configured Resales Online credentials, search and detail requests return a 400 with a message telling you where to add them.

Connection status

GET /resales-online/status

Authentication: Required (Clerk JWT + organization)

Returns whether the current organization has Resales Online credentials configured. Cheap to call; useful for UI gating.

Response

{
  "connected": true
}
FieldTypeDescription
connectedbooleantrue if Resales Online credentials exist for this organization

Example

curl -X GET https://api.fondaro.com/resales-online/status \
  -H "Authorization: Bearer <clerk_jwt>" \
  -H "x-organization-id: <organization_id>"

Search

POST /resales-online/search

Authentication: Required (Clerk JWT + organization, must be connected)

Runs a search against Resales Online V6 and returns normalized properties. Feature filters (featureIds) are applied server-side via Resales' P_MustHaveFeatures=1 flag, so paging is stable.

Request Body

All fields are optional except page and limit.

FieldTypeDescription
minPricenumberMinimum price
maxPricenumberMaximum price
minBedroomsinteger"At least N" bedrooms (maps to Resales P_Beds=Nx)
minBathroomsinteger"At least N" bathrooms (maps to Resales P_Baths=Nx)
minBuiltSizeintegerMinimum built size in m²
maxBuiltSizeintegerMaximum built size in m²
minPlotSizeintegerMinimum plot size in m²
maxPlotSizeintegerMaximum plot size in m²
propertyTypesstring[]Pre-translated Resales TypeId-SubtypeId codes, e.g. ["1-1", "2-2"]
propertyTypeEnumsstring[]Fondaro PropertyType enum values (e.g. ["apartment", "townhouse"]) — translated server-side. Prefer this unless you already know the Resales codes.
locationstringResales P_Location (CSV)
provincestringResales P_Province
sortstringOne of "newest", "price_asc", "price_desc", "last_updated"
featureIdsstring[]Resales feature paramName values (e.g. ["1Pool2", "1Views1"]). Applied AND-wise via P_MustHaveFeatures=1. Fetch the full catalog from GET /resales-online/features. Unknown IDs are rejected.
pageintegerRequired. 1-indexed page number
limitintegerRequired. Page size (1–40)
queryIdstringOmit on page 1; pass the queryId from the page-1 response on pages 2+ for stable pagination

Response

{
  "properties": [
    {
      "id": "R123456",
      "source": "resales_online",
      "title": "3-bed Apartment in Marbella",
      "price": 850000,
      "currency": "EUR",
      "bedrooms": 3,
      "bathrooms": 2,
      "propertyType": "Apartment",
      "location": "Marbella",
      "area": "Costa del Sol",
      "description": "...",
      "mainImage": "https://cdn.resales-online.com/...",
      "images": ["https://..."],
      "builtSize": 120,
      "plotSize": 0,
      "terraceSize": 15,
      "hasPool": true,
      "hasParking": true,
      "hasGarden": false,
      "features": ["Climate Control: Air Conditioning"],
      "latitude": 36.5101,
      "longitude": -4.8824,
      "reference": "R123456",
      "agencyRef": "AG-789",
      "status": "available",
      "virtualTour": null,
      "energyRating": "C"
    }
  ],
  "page": 1,
  "pageSize": 24,
  "totalResults": 142,
  "queryId": "q-abc-123"
}
FieldTypeDescription
propertiesarrayNormalized Resales properties
pageintegerEcho of the returned page number
pageSizeintegerEcho of the returned page size
totalResultsintegerTotal matching properties upstream
queryIdstringMust be passed on page 2+ requests

Pagination lifecycle

Resales Online V6 requires a P_QueryId on every request after page 1 so that listings added or removed between requests don't shift your results. Fondaro's proxy handles this for you:

  1. Make the page-1 request without a queryId.
  2. Capture queryId from the response.
  3. Include that queryId on every subsequent page request.

If you jump directly to a later page without a cached queryId, the frontend helper re-fetches page 1 silently to establish one.

Example

curl -X POST https://api.fondaro.com/resales-online/search \
  -H "Authorization: Bearer <clerk_jwt>" \
  -H "x-organization-id: <organization_id>" \
  -H "Content-Type: application/json" \
  -d '{
    "minPrice": 500000,
    "maxPrice": 1500000,
    "minBedrooms": 3,
    "propertyTypeEnums": ["apartment", "townhouse"],
    "sort": "price_asc",
    "featureIds": ["1Pool2", "1Views1"],
    "page": 1,
    "limit": 24
  }'

Feature catalog

GET /resales-online/features

Authentication: Required (Clerk JWT + organization; connection not required)

Returns the hardcoded Resales feature catalog — the reference list for any featureIds values you send to /resales-online/search. The response is static for a given Fondaro deploy and safe to cache forever client-side.

Response

{
  "categories": [
    {
      "name": "Pool",
      "features": [
        { "paramName": "1Pool1", "name": "Communal Pool" },
        { "paramName": "1Pool2", "name": "Private Pool" }
      ]
    },
    {
      "name": "Views",
      "features": [
        { "paramName": "1Views1", "name": "Sea Views" }
      ]
    }
  ]
}
FieldTypeDescription
categoriesarrayFeature categories as Resales exposes them (Setting, Orientation, Condition, Pool, Climate Control, Views, Features, Furniture, Kitchen, Garden, Security, Parking, Utilities, Category, Plots and Ventures, Rentals)
categories[].namestringCategory label
categories[].featuresarrayFeatures in this category
categories[].features[].paramNamestringValue to send in featureIds
categories[].features[].namestringHuman-readable English label

Property detail

GET /resales-online/detail/:reference

Authentication: Required (Clerk JWT + organization, must be connected)

Returns a single Resales Online property by its reference number. The detail response is richer than search results and includes community fees, annual taxes, the full picture array, completion dates, and GPS coordinates where available.

Response

{
  "property": {
    "id": "R123456",
    "source": "resales_online",
    "title": "3-bed Apartment in Marbella",
    "price": 850000,
    "currency": "EUR",
    "bedrooms": 3,
    "bathrooms": 2,
    "propertyType": "Apartment",
    "location": "Marbella",
    "description": "Fully furnished, walking distance to the beach...",
    "mainImage": "https://cdn.resales-online.com/...",
    "images": ["https://...", "https://..."],
    "features": ["Climate Control: Air Conditioning", "Views: Sea"],
    "latitude": 36.5101,
    "longitude": -4.8824,
    "reference": "R123456",
    "status": "available",
    "virtualTour": "https://tour.example.com/R123456",
    "energyRating": "C",
    "communityFeesPerYear": 2400,
    "basuraTaxPerYear": 180,
    "ibiFeesPerYear": 1200,
    "completionDate": "2018-06-15",
    "builtYear": "2018",
    "pictures": [
      { "id": 0, "url": "https://..." },
      { "id": 1, "url": "https://..." }
    ]
  }
}

Detail-only fields (communityFeesPerYear, basuraTaxPerYear, ibiFeesPerYear, completionDate, builtYear, pictures) appear only on this endpoint. The same normalized shape is returned from /search with these fields omitted.

Example

curl -X GET https://api.fondaro.com/resales-online/detail/R123456 \
  -H "Authorization: Bearer <clerk_jwt>" \
  -H "x-organization-id: <organization_id>"

Status values

The status field on every normalized property is one of:

ValueMeaning
availableListed and available
under_offerOffer received, awaiting acceptance
sale_agreedSale agreed, property reserved
unknownStatus not recognized or not provided

Property type mapping

When you send propertyTypeEnums, the server translates each Fondaro enum value to a Resales TypeId-SubtypeId code. Unmapped enums are silently omitted (the search then returns all property types). Current mapping:

Fondaro enumResales code
apartment1-1
house_detached2-2
house_semi_detached2-1
house_terraced2-5
townhouse2-5
land_residential3-1
land_commercial3-1
land_agricultural3-1
land_other3-1

Errors

StatusMeaning
400Organization has no Resales Online credentials, or request body failed validation
404Detail endpoint: reference not found
401Missing or invalid Clerk JWT

Fondaro Help

Docs & support

Hi there, how can we help?

Browse popular articles or ask a question below.

Popular articles

Or ask a question