Interactive Brochures
Create and manage shareable interactive property brochures through the authenticated REST API or Fondaro MCP.
Fondaro brochures are interactive web pages containing one to 25 snapshotted property listings. A brochure can include a recipient name and note, live organization and agent branding, listing-specific corrections, optional public location presentation, maps, galleries, view statistics, and an expiry. Creating one returns a shareable HTTPS URL under /b/:slug; there is no separate brochure renderer or PDF payload in this API.
PDF window cards are a separate dashboard feature described in the Brochures dashboard guide. The obsolete POST /properties/:id/brochure PDF route is not part of the current API contract.
Choose an API surface
- Use the REST routes on this page from the Fondaro dashboard or another client with a valid Clerk session JWT. The
/brochurescontroller does not accept anfdr_mcp_key. - Use the hosted Fondaro MCP server for API-key automation. It exposes the existing 13-operation brochure lifecycle through scoped, compact tools and returns the same public viewer URL. Duplication is a Clerk-session REST and dashboard action and is not an MCP tool.
Access and lifecycle rules
- A member can list, read, and change only brochures they created. An organization admin can operate across the organization.
- Every lookup is organization-scoped; a brochure in another organization is not exposed.
- A brochure accepts at most 25 listings. Creation needs at least one.
- Expiry defaults to 90 days and can be set from 1 to 365 days.
- Revoking disables the public link without deleting data. Renewing clears revocation and restores the same URL. Permanent delete removes the brochure and its listing snapshots.
- Non-admin branding changes still obey the organization's locked brochure preset.
showLocationsis independent from the branding lock. Any caller allowed to edit a brochure may change it.- Create, add, refresh, and renew-with-refresh may continue image ingest and coordinate enrichment after the response. The public link itself is available immediately.
REST route catalogue
All authenticated management routes are under https://api.fondaro.com.
| Method | Route | Purpose |
|---|---|---|
GET | /brochures | List visible brochures, optionally filtered by search text, creator, expired state, or revoked state |
POST | /brochures | Create a brochure and snapshot 1–25 listings |
GET | /brochures/:id | Read a brochure, listings, live branding, organization preset, and publicUrl |
POST | /brochures/:id/duplicate | Duplicate a visible brochure with fresh identities, lifecycle, and public link |
PATCH | /brochures/:id | Update title, recipient fields, theme, accent, or public location visibility |
DELETE | /brochures/:id | Permanently delete a brochure |
POST | /brochures/:id/renew | Restore the link, set a new expiry, and optionally refresh listings |
POST | /brochures/:id/revoke | Disable the public link reversibly |
POST | /brochures/:id/listings | Add one source listing, optionally at a zero-based position |
DELETE | /brochures/:id/listings/:listingId | Remove one brochure listing |
POST | /brochures/:id/listings/order | Replace the complete listing order |
POST | /brochures/:id/listings/:listingId/refresh | Re-snapshot one listing while preserving brochure overrides |
PATCH | /brochures/:id/listings/:listingId/details | Set or clear listing detail overrides and visibility flags |
PATCH | /brochures/:id/listings/:listingId/location | Correct address and coordinate fields |
listingId in the mutation routes is the brochure-listing UUID returned by create/get, not the source property's id. Reorder requires the exact, complete current set of brochure-listing UUIDs.
CRM lead connections
The Clerk-authenticated REST API can connect a brochure to zero to 25 unique purchased CRM leads without changing the free-text recipientName shown publicly.
- Send optional
leadIds: number[]when creating a brochure. Omit it or send[]to create without connections. - On
PATCH /brochures/:id, omittingleadIdspreserves the current set,leadIds: []clears it, and a non-empty array atomically replaces the complete set. - Members may use only leads assigned to them. Organization admins may use any purchased CRM lead in the organization.
- If any id is missing, outside the organization, no longer purchased, or unavailable to the caller, the API returns a generic unavailable-selection error and makes no brochure or connection change.
- Authenticated list, detail, create, update, renew, and revoke responses include
linkedLeads, containing only each visible lead'sid,firstName, andlastName. GET /brochures?leadId=123returns connected brochures that the caller may also open. Members receive only brochures they created; admins receive all matching organization brochures.- The
qlist filter also matchesrecipientNameand the names of connected leads still visible to the caller.
These fields are intentionally unavailable through managed or public MCP brochure tools. A brochure write scope does not imply CRM read access. The unauthenticated public viewer never receives leadIds, linkedLeads, or other CRM association metadata.
Create a brochure
POST /brochures
Authorization: Bearer CLERK_SESSION_JWT
Content-Type: application/json{
"title": "Estepona homes for Andrew",
"recipientName": "Andrew",
"recipientNote": "Five homes selected for your review.",
"showLocations": false,
"expiresInDays": 90,
"agentId": "user_2abc123",
"listings": [
{
"source": "internal_mls",
"sourcePropertyId": "0d24495c-33ac-4b24-9b6b-48dcad68ef65"
},
{
"source": "idealista",
"sourcePropertyId": "105432100",
"sourceCountry": "es"
}
]
}| Field | Type | Required | Description |
|---|---|---|---|
title | string | No | Display title, maximum 255 characters |
recipientName | string | No | Recipient name shown on the cover |
recipientNote | string | No | Personal note, maximum 4,096 characters |
themeName | string | No | A theme returned by GET /properties/themes; preset locks still apply |
accentColorOverride | string | No | Hex accent colour; preset locks still apply |
showLocations | boolean | No | Show structured locations and maps publicly. Explicit values override the organization starting value; omitted input inherits it, with true as the compatibility fallback |
agentId | string | No | Agent UUID or live Clerk user id in the current organization |
expiresInDays | integer | No | 1–365; defaults to 90 |
listings | array | Yes | 1–25 source identities in the desired display order |
REST source identities use the persisted source spelling: internal_mls, resales_online, resales_viewer, or one of the 19 portal slugs (idealista, rightmove, immobiliare, immoscout, funda, zoopla, seloger, otodom, immowelt, realtor, homes, trulia, propertyfinder, dubizzle, centris, loopnet, zillow, redfin, bayut). A Property Viewer row is normally produced by the dashboard's viewer-link preview/import flow; do not invent its compound source id.
The response contains the brochure, its listing snapshots, and:
{
"id": "9d48015b-c4df-40be-a9db-388d1a1fa3f1",
"slug": "unguessable-random-slug",
"showLocations": false,
"publicUrl": "https://www.fondaro.com/b/unguessable-random-slug",
"expiresAt": "2026-10-19T10:00:00.000Z"
}Duplicate a brochure
POST /brochures/9d48015b-c4df-40be-a9db-388d1a1fa3f1/duplicate
Authorization: Bearer CLERK_SESSION_JWTThe route has no request body. A member may duplicate only a brochure they created; an organization admin may duplicate any brochure in the organization. The caller becomes the owner of the new copy.
Duplication copies the title, recipient fields, location visibility, ordered listing snapshots, brochure-specific corrections, and CRM lead connections still visible to the caller. It does not refresh or re-snapshot source listings. A locked organization branding preset remains authoritative for a non-admin caller.
The result has a new brochure UUID, slug, public URL, brochure-listing UUIDs, timestamps, and independently owned hosted image keys. It is active for a fresh 90 days with zero views and no last-viewed time, even when the source is expired or revoked. The source is unchanged.
The response uses the same complete detail shape as create and GET /brochures/:id, including listings, linkedLeads, live or intentionally frozen branding, organizationPreset, and publicUrl.
Update brochure settings
All fields are optional. An omitted field stays unchanged. null clears title, recipientName, recipientNote, or accentColorOverride; themeName must be a valid non-empty theme name. Send showLocations: false to hide structured locations publicly or showLocations: true to reveal the retained snapshot again.
PATCH /brochures/9d48015b-c4df-40be-a9db-388d1a1fa3f1
Authorization: Bearer CLERK_SESSION_JWT
Content-Type: application/json{
"recipientNote": "I moved our two favourites to the top.",
"accentColorOverride": "#1A5F7A",
"showLocations": true
}Add, reorder, refresh, and remove listings
Add uses a source identity and an optional zero-based position:
{
"source": "resales_online",
"sourcePropertyId": "R5423149",
"position": 1
}Reorder sends every current brochure-listing UUID exactly once:
{
"listingIds": [
"7cb69216-21f2-42ee-9b34-5bd48488e161",
"44a60158-4903-4da8-87b4-127af78ed33c"
]
}Refresh reads the original source again but preserves every brochure-specific title, reference, description, property type, price/room override, location correction, and hide flag.
Correct listing details
Every field is optional. Omit a field to keep its current override; send null to clear an override and fall back to the source snapshot.
{
"titleOverride": "Three-bedroom penthouse with sea views",
"priceOverride": 850000,
"priceToOverride": null,
"bedroomsOverride": 3,
"bedroomsToOverride": null,
"priceHidden": false,
"factsHidden": false
}Supported override fields are titleOverride, referenceNumberOverride, descriptionOverride, propertyTypeOverride, priceOverride, priceToOverride, bedroomsOverride, bedroomsToOverride, bathroomsOverride, and bathroomsToOverride. priceHidden renders “Price on request”; factsHidden suppresses bed and bathroom facts.
Correct a listing location
Patch any combination of latitude, longitude, addressLine1, addressLine2, city, region, provinceState, postalCode, countryCode, and community. Omitted fields remain unchanged; null clears a field.
Revoke, renew, and delete
Revoke returns the brochure with revokedAt set. The public data endpoint and /b/:slug viewer respond with 410 Gone while a brochure is revoked or expired.
Renew clears revocation and extends expiry from the time of the request:
{
"expiresInDays": 90,
"refreshListings": true
}The response contains failedRefreshes when individual source refreshes fail; the renewed brochure and unchanged public URL remain valid. Use DELETE /brochures/:id only when permanent removal is intended.
Public viewer data
The localized web viewer uses the unauthenticated GET /public/brochures/:slug endpoint. Resolving it records a view asynchronously and returns the rich public payload used by the page. GET /public/brochures/:slug/exists checks link availability without returning the brochure.
When brochure.showLocations is false, every public listing returns null for addressLine1, addressLine2, postalCode, city, provinceState, region, countryCode, community, latitude, and longitude. The authenticated GET /brochures/:id management response keeps those fields so corrections and a later visibility change remain possible. Free-text titles, descriptions, recipient notes, and image content are not rewritten.
Treat the slug and publicUrl as bearer-like secrets: anyone who has the link can see its recipient note and listings until expiry or revocation. Do not log the URL or place sensitive personal data in recipient fields.
Themes
GET /properties/themes remains the theme catalogue for interactive brochures and dashboard window cards. It returns the canonical picker order with each theme's machine name, display label, mood description, light/dark preview colours, and primary font family. Registry-only tenant themes and retired compatibility aliases are not returned. Theme selection does not generate a PDF and does not create a brochure by itself.
Related Articles
MCP Server
Connect an MCP client with Fondaro OAuth or a scoped fdr_mcp_ API key.
Brochures (Dashboard)
Create shareable interactive web brochures from selected listings, and generate PDF window cards from any property detail page.
Authentication
How to create, use, and revoke Fondaro API keys for programmatic access.