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
| Field | Type | Description |
|---|---|---|
page | integer (optional, default 1) | 1-based page index. |
limit | integer (optional, default 20, max 20) | Page size; Zoddak caps at 20. |
propertyTypes | string[] (optional) | Pre-translated Zoddak labels (Apartments, Villas, Townhouses). |
propertyTypeEnums | string[] (optional) | Fondaro PropertyType enum values; translated server-side. propertyTypes wins when both are set. |
towns | string[] (optional) | CSV-joined into Zoddak's towns. |
places | string[] (optional) | CSV-joined into Zoddak's places. |
provinces | string[] (optional) | CSV-joined into Zoddak's provinces. |
zones | string[] (optional) | CSV-joined into Zoddak's zones. |
stages | number[] (optional) | Stage IDs (1–5). See /zoddak/stages. |
minPrice / maxPrice | number (optional) | EUR price bounds. |
minBeds / maxBeds | integer (optional) | Filters on the development's min_beds. A 4+ filter matches developments whose smallest unit has 4+ beds. |
minBaths / maxBaths | integer (optional) | Same range semantics as beds. |
sort | price_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"
}
}
]
}