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(currentlyhome)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
3) Social links
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}/
6) Builders and property links
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_categorytransaction_typecitybuilder(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_visibilityJSON 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,messagecontact_via_sms,contact_via_emailpage_path,utm
Behavior:
- Creates a
Lead(source=website) - Creates
LeadActivitymetadata 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"
}
}