Zoddak

Search, fetch, and check connection status for Zoddak off-plan property developments through the Fondaro API.

The Zoddak endpoints proxy live calls to the Zoddak v1 API using the API token stored under the organization's Integrations. Results are always live — nothing is cached on Fondaro's side.

Every endpoint requires a valid Clerk session and an active organization. If your organization has no Zoddak token configured, every endpoint returns a 400 with a message telling you where to add one.

Connection status

GET /zoddak/status

Authentication: Required (Clerk JWT + organization)

Cheap probe — returns whether the current organization has a Zoddak API token configured. Used by the UI to gate the source dropdown.

Response

{
  "connected": true
}

Search developments

POST /zoddak/search

Authentication: Required (Clerk JWT + organization)

Live-fetches a page of Zoddak developments using the Squid proxy that routes all Zoddak egress through 188.166.0.181. Translates page + limit to Zoddak's start + end indexes; max page size is 20.

Request body

FieldTypeDescription
pageinteger (optional, default 1)1-based page index.
limitinteger (optional, default 20, max 20)Page size; Zoddak caps at 20.
propertyTypesstring[] (optional)Pre-translated Zoddak labels (Apartments, Villas, Townhouses).
propertyTypeEnumsstring[] (optional)Fondaro PropertyType enum values; translated server-side. propertyTypes wins when both are set.
townsstring[] (optional)CSV-joined into Zoddak's towns.
placesstring[] (optional)CSV-joined into Zoddak's places.
provincesstring[] (optional)CSV-joined into Zoddak's provinces.
zonesstring[] (optional)CSV-joined into Zoddak's zones.
stagesnumber[] (optional)Stage IDs (1–5). See /zoddak/stages.
minPrice / maxPricenumber (optional)EUR price bounds.
minBeds / maxBedsinteger (optional)Filters on the development's min_beds. A 4+ filter matches developments whose smallest unit has 4+ beds.
minBaths / maxBathsinteger (optional)Same range semantics as beds.
sortprice_asc | price_desc (optional)Other unified sort modes collapse to default order.

Response

{
  "developments": [
    {
      "id": 42,
      "reference": "CHL",
      "name": "Cerrado Hills",
      "propertyType": "Villas",
      "priceTitle": "From",
      "minPrice": 2300000,
      "maxPrice": 4100000,
      "minBeds": 4,
      "maxBeds": 6,
      "minBaths": 4,
      "maxBaths": 6,
      "minBuiltArea": 420,
      "maxBuiltArea": 780,
      "minPlotArea": 1200,
      "maxPlotArea": 3200,
      "town": "Marbella",
      "place": "El Madroñal",
      "postcode": "29679",
      "latitude": 36.5234,
      "longitude": -4.9876,
      "stage": "Offplan",
      "unitsTotal": 13,
      "unitsAvailable": 9,
      "imagesSm": ["..."],
      "imagesMd": ["..."],
      "imagesLg": ["..."]
    }
  ],
  "page": 1,
  "pageSize": 20,
  "totalResults": 39
}

units[] is omitted on list responses. See GET /zoddak/detail/:reference to retrieve the full per-unit table for a single development.

Development detail

GET /zoddak/detail/:reference

Authentication: Required (Clerk JWT + organization)

Fetches the full payload for a single development, including the populated units[] array (unit, beds, baths, built area, plot, price). Use the development's reference from the search response.

Response

{
  "development": {
    "id": 42,
    "reference": "CHL",
    "name": "Cerrado Hills",
    "...": "...",
    "units": [
      {
        "block": "A",
        "floor": "0",
        "door": "1",
        "unit": "Villa 1",
        "beds": 5,
        "baths": 5,
        "toilets": 1,
        "builtArea": 580,
        "usefulArea": 520,
        "coveredTerrace": 80,
        "outdoorTerrace": 120,
        "solarium": 0,
        "basement": 60,
        "plot": 1800,
        "garden": 600,
        "commonAreas": 0,
        "garage": 80,
        "storageRoom": 12,
        "price": 2300000
      }
    ]
  }
}

Locations

GET /zoddak/locations?query=<string>

Authentication: Required (Clerk JWT + organization)

Returns the flattened Zoddak location hierarchy — zones → provinces → towns → places — for use in the dashboard's location autocomplete. Optional query does a case-insensitive prefix-then-contains filter server-side.

Response

{
  "locations": [
    { "kind": "zone",     "label": "Costa del Sol",  "totalItems": 1200 },
    { "kind": "province", "label": "Málaga",         "parent": "Costa del Sol", "totalItems": 1100 },
    { "kind": "town",     "label": "Marbella",       "parent": "Málaga",        "totalItems": 320 },
    { "kind": "place",    "label": "Nueva Andalucía","parent": "Marbella",      "totalItems": 80 }
  ]
}

Stages

GET /zoddak/stages

Authentication: Required (Clerk JWT + organization)

Returns the canonical Zoddak development stages with localized labels for all 11 supported languages. Used by the stage filter pill in the property-listings view.

Response

{
  "stages": [
    {
      "id": 2,
      "labels": {
        "en": "Offplan",
        "es": "Sobre plano",
        "de": "In Planung",
        "fr": "Sur plan"
      }
    }
  ]
}

Fondaro Help

Docs & support

Hi there, how can we help?

Browse popular articles or ask a question below.

Popular articles

Or ask a question