Part of the Content API. Endpoints for the site’s pages: content pages, agent landing pages, area pages, the home page, page templates and revisions.
Content pages
/api/v3/content/pages//api/v3/content/pages/<id>/Regular content pages. Scopes: pages:read / pages:write. Market report pages, coming soon pages and valuation pages are managed in the admin and are not visible here.
| Field | Type | Notes |
|---|---|---|
id, path, url, level, children_count |
Read-only. | |
slug |
string | Required; letters, numbers, -, _, /. |
parent |
int / null | Id of the parent page; read as {"id", "slug", "path"}. |
anchor_text |
string ≤256 | Required; the page name used in navigation. |
title, meta_description, meta_keywords |
string | SEO fields. |
content |
HTML | Sanitized. |
template |
string | One of GET /api/v3/content/templates/; default Page with Search. |
listing_header |
string | Header above the property listings. |
number_of_properties |
int | One of 0, 3, 5, 6, 10, 12, 15, 20, 24, 25, 30, 40, 50, 60, 75, 100, 120; default 12. |
property_display_location |
above / below |
Listings above or below the content; default below. |
search_header |
string | Header above the search form. |
search_form_type |
default / typeahead |
Which search form the page shows. |
search_field_defaults |
same as search |
Saved search whose criteria pre-fill the search form; null to clear. |
sidebar |
int / null | Id of a sidebar; read as {"id", "name"}. |
search |
see below | The saved search whose listings the page shows; null to detach. |
extra_content |
object | Template-specific areas, see below. |
footer |
int / null | Id of a footer; read as {"id", "name", "default"}. |
landscape_image_override |
see below | The big image/video at the top of the page. |
landscape_image_override_alt_text |
string ≤100 | |
landscape_image_override_content_type |
MIME | Derived from the URL’s extension when omitted. |
banner_id, capture_form_id, require_capture |
Read-only; managed in the admin. |
landscape_image_override is null to use the site’s header image, "none" to hide the landscape section, or a file URL (image or .mp4 video; see Files). Area pages and the home page take the same fields.
The search field
search reads as {"id", "short_id", "description", "criteria"} where criteria is {field: [values]}. To set it, send a saved search’s short_id (the base36 id in the site’s search URLs), its numeric id, or a criteria object such as {"city": ["Jupiter"], "list_price_min": 1000000}. A criteria object is validated against the site’s search fields, unknown fields are rejected with a 422 naming them, and the resulting search is saved (or reused if identical). Area pages and the home page take the same sidebar, search and footer values.
Template areas (extra_content)
Some templates add fields, listed per template by GET /content/templates/. They read and write as an object keyed by the area name with spaces as underscores; on write, keys are merged into what is stored (send null to clear one), unknown keys are a 422, and changing template drops areas the new template lacks. Values by area type: text is a string, rich_text is sanitized HTML, file is a file URL, reorder_agents is a list of Agent Detail page ids.
- Agent Detail Page:
Agent_Name,Agent_Photo(file URL),Cell_Phone_Number,Fax_Number,Email,Company,Address,Testimonials(HTML). Create one with"template": "Agent Detail Page". - About Page:
Testimonials(HTML) andAgent_Ordering(ids). An About page also carries a read-onlyagentslist, the site’s Agent Detail pages in display order as{"id", "name", "path", "url", "photo_url"}; pages not inAgent_Orderingfollow the ordered ones.
Validation, filters and limits
Validation mirrors the admin: the resulting URL must be unique across all pages, must not be a path Real Geeks reserves (search, market reports, the blog root, …), and a parent change must not create a loop.
List filters: slug, path (e.g. ?path=/resources/buyers/), parent (id or null), template, q (anchor text / title / slug contains), ordering (slug, level, id), include_content=false.
Pages nest at most 10 levels deep and a page URL is at most 200 characters. Deleting a page with children returns 409 conflict; pass ?orphan_children=true to delete it and make the children top-level pages.
Agent landing pages
/api/v3/content/agent-pages//api/v3/content/agent-pages/<id>/Content pages tied to a CRM agent: leads from the page go to that agent instead of the site’s round robin. Same fields and rules as content pages plus agent_id (writable; an id from GET /content/agents/, or null) and read-only agent_name. These pages are separate from /content/pages/ (neither lists the other). Scopes: pages:*.
GET /content/agents/ returns the site’s CRM agents as {"results": [{"id", "name"}]}; 502 crm_unavailable if the CRM cannot be reached, and writing agent_id is refused with the same code until it can be checked.
Area pages
/api/v3/content/area-pages//api/v3/content/area-pages/<id>/Same shape as content pages without template/extra_content, plus area_name (required) and featured (bool). Extra filter: featured=true|false. Scopes: area_pages:*.
Home page
/api/v3/content/home-page/The site’s single home page. Scopes: home_page:*. Writable: title, meta_description, meta_keywords, content, sidebar, footer, tile_group (a Featured Pages group id or null, anna-modern), the landscape override fields, the property display options search, listing_header, number_of_properties, property_display_location, property_display_type (carousel, grid or null), and the search form options search_header, search_subheader, search_form_type, search_form_tabs (bool), search_field_defaults, search_image (file URL or null).
Some of these only render on some designs (for example property_display_type and search_form_tabs on anna-modern), matching the admin. A site without a home page returns 404 home_page_missing; create it in the admin.
Page templates
/api/v3/content/templates/The page templates this site can use, with their extra content areas. Accepts any valid key.
{"results": [ {"name": "About Page", "description": "...", "extra_content_areas": [ {"name": "Testimonials", "type": "rich_text"}]}]}
Revisions and undo
.../revisions/.../revisions/<rev>/.../revisions/<rev>/revert/Content pages, agent landing pages and the home page keep a revision for every save that changes a field the admin’s Versions page tracks (it is the same history): content, template, anchor_text, sidebar, footer, search, search_field_defaults, search_header, listing_header, number_of_properties, property_display_location and extra_content on pages, and the equivalent fields on the home page. Changes to other fields (slug, parent, title, meta_*, landscape image, search_form_type) are recorded in the site’s change log but cannot be undone here. Revisions are attributed to the API key that made them.
GET /content/pages/<id>/revisions/(also/content/agent-pages/<id>/revisions/and/content/home-page/revisions/) lists revisions newest first:{"id", "at", "by", "action": "created|changed|reverted", "changed_fields", "revertible"}, wherebynames the person the key belongs to and the key used. Admin edits haveapi_key: null.GET .../revisions/<rev>/addspreview: per changed field, the value now and the value a revert would restore.POST .../revisions/<rev>/revert/(write scope) undoes that revision and every later one, returning the page. The revert is itself a revision, so it can be undone the same way. The creation revision cannot be reverted; delete the page instead.
Other resources (posts, sidebars, navigation, footers, settings, files) do not have revisions yet; their changes are only recorded in the site’s change log.
