Websites API

Website APIs are split into:

  • Admin APIs (/admin/websites/*) for agency configuration (authenticated partner only)
  • Public APIs (/public/websites/*) for website rendering and lead capture (no auth)

Admin APIs (/admin/websites/)

Authentication: Required (Bearer partner token with agency context).

1) Website settings

  • GET /admin/websites/settings/
  • POST /admin/websites/settings/
  • GET /admin/websites/settings/{id}/
  • PATCH /admin/websites/settings/{id}/
  • DELETE /admin/websites/settings/{id}/

Stores one website per agency (domain_name, website_title, SEO/footer fields, publish status).

2) Homepage sections

  • GET /admin/websites/sections/
  • POST /admin/websites/sections/
  • GET /admin/websites/sections/{id}/
  • PATCH /admin/websites/sections/{id}/
  • DELETE /admin/websites/sections/{id}/

Supports ordered section blocks using:

  • page_type (currently home)
  • section_type (header, hero, banners, property_list, property_collection, about_agency, builder_partnerships, footer)
  • layout_type (default, banner_4, banner_2_horizontal, banner_2_vertical, banner_6, carousel)
  • sort_order, is_enabled, config
  • GET /admin/websites/social-links/
  • POST /admin/websites/social-links/
  • GET /admin/websites/social-links/{id}/
  • PATCH /admin/websites/social-links/{id}/
  • DELETE /admin/websites/social-links/{id}/

Flexible links (platform_key, label, url, icon_hint, sort_order, is_enabled).

4) Custom raw HTML pages

  • GET /admin/websites/pages/
  • POST /admin/websites/pages/
  • GET /admin/websites/pages/{id}/
  • PATCH /admin/websites/pages/{id}/
  • DELETE /admin/websites/pages/{id}/

Stores HTML page content by slug (raw_html, publish flag, SEO fields).

5) Property collections

  • GET /admin/websites/collections/
  • POST /admin/websites/collections/
  • GET /admin/websites/collections/{id}/
  • PATCH /admin/websites/collections/{id}/
  • DELETE /admin/websites/collections/{id}/

Collection items:

  • GET /admin/websites/collection-items/
  • POST /admin/websites/collection-items/
  • GET /admin/websites/collection-items/{id}/
  • PATCH /admin/websites/collection-items/{id}/
  • DELETE /admin/websites/collection-items/{id}/
  • GET /admin/websites/builders/
  • POST /admin/websites/builders/
  • GET /admin/websites/builders/{id}/
  • PATCH /admin/websites/builders/{id}/
  • DELETE /admin/websites/builders/{id}/

Property-builder links:

  • GET /admin/websites/property-builder-links/
  • POST /admin/websites/property-builder-links/
  • GET /admin/websites/property-builder-links/{id}/
  • PATCH /admin/websites/property-builder-links/{id}/
  • DELETE /admin/websites/property-builder-links/{id}/

Legacy endpoint

  • GET/POST/PATCH/DELETE /admin/websites/legacy/

Kept for backward compatibility with old SellerCompany-based website flow.


Public APIs (/public/websites/)

Authentication: Not required.

Website resolution is domain-based: the backend resolves the website from request host (for example, Host: agencydomain.com).

1) Site bootstrap

  • GET /public/websites/site/bootstrap/

Returns website metadata + enabled homepage sections + social links.

2) Published custom page by slug

  • GET /public/websites/site/pages/{slug}/

Returns published page payload including raw_html.

3) Published collection by slug

  • GET /public/websites/site/collections/{slug}/

Returns collection metadata and website-visible property cards.

4) Public property listing

  • GET /public/websites/properties/

Allowlisted filters:

  • property_category
  • transaction_type
  • city
  • builder (builder slug)
  • collection (collection slug)

Pagination shape:

  • request: limit, cursor
  • response: items, nextCursor, hasMore, total, meta

5) Public property batch fetch

  • POST /public/websites/properties/batch/

Allows fetching multiple specific properties dynamically (e.g., for a carousel). Pagination/limits: Hard limit of max 20 properties per call.

Request body fields: - ids (required list of integer IDs) - fields (optional list of string fields, e.g. ["property_name", "photos"])

Returns an array of masked properties optimized for bandwidth. id, public_slug, and created_at are always included.

6) Public property detail

  • GET /public/websites/properties/{public_slug}/

Returns property detail masked by:

  • property-level booleans (show_address, show_price, show_brokerage)
  • public_visibility JSON controls

7) Public inquiry form (lead creation)

  • POST /public/websites/inquiries/

Request fields:

  • property_slug (required)
  • phone (required)
  • contact_consent (required boolean)
  • first_name, last_name, email, message
  • contact_via_sms, contact_via_email
  • page_path, utm

Behavior:

  • Creates a Lead (source=website)
  • Creates LeadActivity metadata with consent and context (domain/page/user-agent/etc)

Example request:

{
  "property_slug": "ocean-heights",
  "first_name": "Asha",
  "last_name": "Shah",
  "email": "asha@example.com",
  "phone": "+919999999999",
  "message": "Interested in site visit",
  "contact_consent": true,
  "contact_via_sms": true,
  "contact_via_email": false,
  "page_path": "/property/ocean-heights",
  "utm": {
    "source": "google"
  }
}