Open Houses
Read open houses agencies open to the network, RSVP to them, and the keyless invitation page for agents without an account.
Overview
An open house is an agency opening one of its listings to other agents for a time window. It states what the introducing agency earns, and other agents say they are coming. Open houses are free for every organization, host and attendee.
The listing behind an open house can come from any connected source (the Fondaro network, Resales Online and the rest). Fondaro reads it live through the same property sources as everything else, so the price and photos you see are the listing's current ones. The commission on the event is fixed when the host publishes it, so a later change to the listing cannot change a promise already made.
What each reader sees:
| Reader | Street address | Commission offered | Listing owner's private commission |
|---|---|---|---|
A signed-in agent (/network/open-houses) | Yes: the event's disclosed address and the listing's own address and map position, as for any active network listing | Yes | Never |
Anyone with the link (/public/open-houses/:slug) | Only after they confirm their RSVP by email | Yes | Never |
Endpoints
| Method & path | Auth | Purpose |
|---|---|---|
GET /network/open-houses | Dashboard session | Upcoming open houses on the network, or your agency's own |
GET /network/open-houses/:id | Dashboard session | One open house |
GET /network/open-houses/by-slug/:slug | Dashboard session | The same open house, by the slug in its invitation link |
GET /network/open-houses/:id/rsvps | Dashboard session | Host only: who is coming, by agency |
POST /network/open-houses/:id/rsvp | Dashboard session | Say you are going, or that you are not |
GET /public/open-houses/:slug | None | The invitation page data |
POST /public/open-houses/:slug/rsvp | None | Ask to RSVP; sends a confirmation email |
POST /public/open-houses/:slug/rsvp/confirm | None | Confirm the RSVP from the emailed link |
Hosting (create, edit, publish, cancel, and the host's list of who is coming)
uses the same /network/open-houses routes from the dashboard. Only your
agency's admin or the listing's own agent can manage an open house.
The /network routes use the dashboard's Clerk bearer token and your active
organization. They do not accept a property API key. On the
MCP server, the same reads are the list_open_houses and
get_open_house tools under the properties:read scope.
List open houses
GET /network/open-houses
| Query parameter | Type | Default | Description |
|---|---|---|---|
scope | network | mine | network | network: published events other agents can see, nearest first. mine: your agency's events in every status |
from | ISO date-time | now | Events that end after this moment |
to | ISO date-time | none | Events that start before this moment |
area | string | none | Matches the listing's city, area or community. Case and accents do not matter |
placeId | UUID | none | A place from GET /places: only events whose listing is in that place or inside it (a town and its neighbourhoods, a province and its towns). Combines with area. An unknown id returns 400 OPEN_HOUSE_FILTER_INVALID |
source | source id | none | Only events on listings from this source, for example internal or resales_online |
listingSource | source id | none | With listingId: the open houses of exactly one listing |
listingId | string | none | The listing's id in its source. Needs listingSource |
listingCountry | string | none | The listing's country, when its reference carries one (portal listings). A listing without one only matches events without one |
limit | 1 to 100 | 50 | Page size |
To ask whether one listing has an open house, pass its reference exactly as a property search or detail returned it:
curl "https://api.fondaro.com/network/open-houses?listingSource=internal&listingId=a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d" \
-H "Authorization: Bearer $TOKEN"listingId without listingSource, or a source that names a different
source than listingSource, answers 400 OPEN_HOUSE_FILTER_INVALID.
curl "https://api.fondaro.com/network/open-houses?area=nueva%20andalucia&limit=10" \
-H "Authorization: Bearer $TOKEN"{
"items": [
{
"id": "0b4d6c1e-8a53-4c2e-9f61-2b1f0e7d9a10",
"slug": "q3H8vZ0bRk2mXw4t",
"status": "published",
"visibility": "network",
"listingRef": { "source": "internal", "id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d" },
"startsAt": "2026-09-29T09:00:00.000Z",
"endsAt": "2026-09-29T12:00:00.000Z",
"timezone": "Europe/Madrid",
"disclosedAddress": "Calle Ejemplo 7, Los Granados Golf",
"mapUrl": "https://maps.example.com/?q=36.49,-4.98",
"commissionOffer": 4,
"commissionNotes": "+ VAT, payable on invoice",
"invitation": {
"headline": "Garden apartment on the golf",
"body": "Come and see it before it goes to the portals.",
"points": ["South facing", "Community fees 1,800 EUR a year"]
},
"contactName": "Lucia Moreno",
"contactPhone": "+34 600 000 002",
"host": { "organizationId": "…", "name": "Example Realty", "logoUrl": "https://…" },
"hostUserId": "user_2abc…",
"listing": {
"ref": { "source": "internal", "id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d" },
"source": "internal",
"title": "Garden apartment",
"price": 650000,
"currency": "EUR",
"bedrooms": 3,
"city": "Marbella",
"area": "Nueva Andalucía",
"address": { "line1": "Calle Ejemplo 7", "postalCode": "29660" },
"latitude": 36.4912,
"longitude": -4.9876,
"agent": { "firstName": "Lucia", "lastName": "Moreno" }
},
"goingCount": 4,
"myRsvp": null,
"isHost": false,
"createdAt": "2026-09-24T08:00:00.000Z",
"updatedAt": "2026-09-24T08:05:00.000Z"
}
],
"hasMore": false
}listing is null when the listing can no longer be read or is no longer on
the market; the event's own fields still show. hostUserId is who to message:
start a conversation with POST /chat/dms and recipientUserId set to it.
hostHandle is the host agent's network handle (/network/agents/{handle}), or null when their profile is not open to you; host.networkSlug is the host agency's page (/network/agencies/{slug}), or null.
commissionOffer is a percentage for the introducing agency.
Get one open house
GET /network/open-houses/:id
curl https://api.fondaro.com/network/open-houses/0b4d6c1e-8a53-4c2e-9f61-2b1f0e7d9a10 \
-H "Authorization: Bearer $TOKEN"Returns one object in the shape above. Another agency's open house is readable
once it is published, including one shared by link only. A draft is visible to
the host alone; anything else reads as 404.
By its invitation link
GET /network/open-houses/by-slug/:slug
curl https://api.fondaro.com/network/open-houses/by-slug/q3H8vZ0bRk2mXw4t \
-H "Authorization: Bearer $TOKEN"The invitation link /open-houses/:slug carries only the slug. This answers
with the same object, the same rules and the same 404s as the read by id, so
an app that opens the link while signed in can show the full event, including
one shared by link only.
Who is coming (host only)
GET /network/open-houses/:id/rsvps
[
{
"id": "5e0c…",
"status": "going",
"kind": "network",
"attendeeUserId": "user_2xyz…",
"attendeeOrganizationId": "…",
"agencyName": "Costa Homes",
"attendeeName": "Ana García",
"attendeeImageUrl": "https://img.clerk.com/…",
"guestName": null,
"guestEmail": null,
"createdAt": "2026-09-25T10:00:00.000Z",
"updatedAt": "2026-09-25T10:00:00.000Z"
},
{
"id": "7a91…",
"status": "going",
"kind": "guest",
"attendeeUserId": null,
"attendeeOrganizationId": null,
"agencyName": "Guest Agency",
"attendeeName": null,
"attendeeImageUrl": null,
"guestName": "Pat Guest",
"guestEmail": "pat@example.com",
"createdAt": "2026-09-25T11:00:00.000Z",
"updatedAt": "2026-09-25T11:00:00.000Z"
}
]An agent on Fondaro carries their name and photo as another agency sees them: never their sign-in email. A guest is named by what they typed when they confirmed. Only your agency's admin or the listing's agent can read this list.
RSVP as a signed-in agent
POST /network/open-houses/:id/rsvp
curl -X POST https://api.fondaro.com/network/open-houses/0b4d6c1e-8a53-4c2e-9f61-2b1f0e7d9a10/rsvp \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "status": "going" }'You have one RSVP per open house. Send { "status": "declined" } to take it
back and going again to change your mind. Returns the open house with your
myRsvp. Your own agency's events answer 400 OPEN_HOUSE_OWN_EVENT; a
cancelled or finished one answers 409 OPEN_HOUSE_RSVP_CLOSED.
The public invitation
GET /public/open-houses/:slug
No authentication. The slug is the link the host shares; open houses are never
listed publicly and the response carries X-Robots-Tag: noindex, nofollow. It
is cached for up to five minutes.
curl https://api.fondaro.com/public/open-houses/q3H8vZ0bRk2mXw4t{
"slug": "q3H8vZ0bRk2mXw4t",
"status": "published",
"startsAt": "2026-09-29T09:00:00.000Z",
"endsAt": "2026-09-29T12:00:00.000Z",
"timezone": "Europe/Madrid",
"commissionOffer": 4,
"commissionNotes": "+ VAT, payable on invoice",
"invitation": { "body": "Come and see it before it goes to the portals." },
"contactName": "Lucia Moreno",
"contactPhone": "+34 600 000 002",
"host": { "name": "Example Realty", "logoUrl": "https://…" },
"listing": {
"ref": { "source": "internal", "id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d" },
"title": "Garden apartment",
"price": 650000,
"city": "Marbella",
"area": "Nueva Andalucía"
},
"goingCount": 4,
"rsvpOpen": true
}There is no street address, postcode, map link or map position here. They appear only in the confirmation response below.
RSVP without an account
POST /public/open-houses/:slug/rsvp
curl -X POST https://api.fondaro.com/public/open-houses/q3H8vZ0bRk2mXw4t/rsvp \
-H "Content-Type: application/json" \
-d '{ "name": "Ana Example", "agency": "Example Homes", "email": "ana@example.com" }'Answers 202 { "status": "pending_confirmation" } and emails a confirmation
link to the address given. Nothing is saved and the host sees nothing until the
link is confirmed. The answer is the same whether or not that email has
answered before. The form's hidden website field must stay empty. The route
allows 5 requests a minute per network address.
Confirm the RSVP
POST /public/open-houses/:slug/rsvp/confirm
The email links to the invitation page on fondaro.com, which sends the token
here. It is a POST so an email scanner opening the link cannot confirm on
someone's behalf. The link is valid for 48 hours and can be opened again.
curl -X POST https://api.fondaro.com/public/open-houses/q3H8vZ0bRk2mXw4t/rsvp/confirm \
-H "Content-Type: application/json" \
-d '{ "token": "v2:…" }'{
"status": "confirmed",
"openHouse": { "slug": "q3H8vZ0bRk2mXw4t", "goingCount": 5, "rsvpOpen": true },
"disclosedAddress": "Calle Ejemplo 7, Los Granados Golf",
"mapUrl": "https://maps.example.com/?q=36.49,-4.98",
"listingAddress": { "line1": "Calle Ejemplo 7", "postalCode": "29660" },
"latitude": 36.4912,
"longitude": -4.9876
}openHouse is the full public object from above (shortened here). A link that
is not valid answers 400 OPEN_HOUSE_RSVP_TOKEN_INVALID.
Errors
Errors carry a code:
| Status | Code | Meaning |
|---|---|---|
404 | OPEN_HOUSE_NOT_FOUND | No such open house, or it is not visible to you |
400 | OPEN_HOUSE_FILTER_INVALID | The one-listing filter is incomplete or contradicts source |
403 | OPEN_HOUSE_HOST_ONLY | Only the host agency's admin or the listing's agent can do this |
400 | OPEN_HOUSE_OWN_EVENT | Your agency hosts this open house |
409 | OPEN_HOUSE_RSVP_CLOSED | The open house is cancelled or has ended |
400 | OPEN_HOUSE_RSVP_TOKEN_INVALID | The confirmation link is not valid or has expired |
503 | OPEN_HOUSE_EMAIL_FAILED | The confirmation email could not be sent; try again |
Notifications
Signed-in agents with the mobile app get a push for the open houses they are
part of. Each push carries { "type": "open_house.<event>", "route": "open_house", "openHouseId": "…" }:
| Type | Who gets it |
|---|---|
open_house.rsvp_created | The member who created the event, when someone says they are coming |
open_house.updated | Everyone going, when the time, the address or the commission changes |
open_house.cancelled | Everyone going, when the event is cancelled |
Each type is also a notification preference key (PUT /notifications/preferences
with types); all three are on by default.
Related Articles
API Overview
Introduction to the Fondaro API: base URL, authentication, scopes, OpenAPI, response format, errors, pagination and rate limits.
Property Sources
Discover connected property sources and use one search, detail, location and option contract.
MCP Server
Connect an MCP client with Fondaro OAuth or a scoped fdr_mcp_ API key.