Portal feeds
Choose which portals each listing goes to, connect portal feeds, and serve the XML feeds portals crawl.
Fondaro sends your active listings to property portals as XML feeds the portals fetch. You choose the portals per listing, connect each portal once to get its feed URL, and give that URL to the portal.
List the portals
GET /properties/portals
The portals a listing can be sent to and what each needs. Needs properties:read.
| Portal ids | Availability |
|---|---|
jamesedition, kyero, thinkspain, a_place_in_the_sun, properstar, spain_property_portal, trovit, mitula, nestoria, nuroa, green_acres, homesgofast | live |
spainhouses, indomio, arkadia | beta |
idealista, fotocasa, habitaclia, pisos_com, rightmove, zoopla | coming_soon (cannot be selected) |
Kyero takes Spanish listings only. JamesEdition has its own feed; see JamesEdition feed.
Choose a listing's portals
PUT /properties/:id/publications
Replaces the full set of portals one of your listings is sent to; [] removes it from every portal. Needs properties:write.
Selecting any of Trovit, Mitula, Nestoria or Nuroa selects all four: they share one feed. A coming-soon portal is a 400.
status | Meaning |
|---|---|
queued | Not active yet, or not yet served in the feed |
in_feed | Served in the feed, but no fetch by the portal since |
live | The portal fetched the feed after the listing entered it. This does not prove the portal is showing it |
not_connected | Selected, but your agency has not connected that portal |
ineligible | A portal rule fails (see Eligibility) |
GET /properties/:id on your own listing also returns publications and portalEligibility ([{ portal, eligible, reasons }]).
Connect a portal
These routes take a signed-in dashboard session; every write needs an organization admin.
| Method and path | Purpose |
|---|---|
GET /properties/portal-connections | Your connections. feedUrl is hidden unless an admin adds ?includeFeedUrl=true |
POST /properties/portal-connections/:portal | Connect a portal and create its feed URL |
PATCH /properties/portal-connections/:portal | Save the portal's account reference ({ "accountRef": "..." }, up to 120 characters) |
POST /properties/portal-connections/:portal/rotate | Replace the feed URL; the old one stops working at once |
DELETE /properties/portal-connections/:portal | Disconnect |
Green-Acres needs its agency id as accountRef before its feed serves anything. Rotating any of the four shared-feed portals rotates all four. After a rotation, give the new URL to the portal.
The feed URL
GET /properties/feeds/:slug/:token.xml
Public, because portal crawlers have no Fondaro login: the token in the path is the secret. Treat it like a password: never log it or put it in a client app.
Returns application/xml with every listing that is selected, active and eligible for that portal. The feed is always complete, so a listing that leaves it is removed by the portal on its next fetch.
| Format | Slugs |
|---|---|
| Kyero V3 | kyero, thinkspain, a-place-in-the-sun, properstar, spain-property-portal, spainhouses, indomio, arkadia |
| Thribee (one shared feed) | trovit, mitula, nestoria, nuroa |
| Green-Acres | green-acres |
| HomesGoFast | homesgofast |
A token works only with its own portal's slug (or any slug of the shared Thribee feed).
Caching. Responses carry Cache-Control: no-store, an ETag, and Last-Modified (the newest listing change). Send If-None-Match with the last ETag to get 304 Not Modified when nothing changed. A 200 or 304 counts as a fetch for the live status.
Errors. An unknown or coming-soon slug, a wrong token, a disabled agency or a missing Green-Acres account reference all return plain 404 Feed not found. A build failure returns 500 Feed unavailable. Neither says which check failed.
Eligibility
A listing is left out of a portal's feed while any rule fails. reasons can hold several:
| Reason | Meaning |
|---|---|
not_active | Not active (shown as queued) |
no_price, price_out_of_range | No price, or one the format cannot carry |
no_city, no_province, no_postcode | A required place field is empty |
no_coordinates | Latitude and longitude are both required |
country_not_supported | The portal does not take the listing's country |
currency_not_supported | The format does not carry the listing's currency |
type_not_supported | The property type has no match at that portal |
no_images | No usable photo (Kyero-format photo URLs must end in .jpg, .jpeg, .png or .gif with no query string) |
rent_period_unsupported | The rental period cannot be expressed |
description_too_short | No description long enough (Thribee needs 30 characters of text) |
no_public_url | Thribee needs a public page for the listing |
The server decides eligibility; show these reasons rather than re-implementing the rules.