Download OpenAPI specification:
This comprehensive API provides both dashboard management and client integration capabilities for PropVR's platform with the following features:
All endpoints require JWT authentication via the Authorization header:
Authorization: Bearer <your_jwt_token>
Each organization receives dedicated JWT tokens for secure API access. Contact PropVR support to receive your authentication credentials.
For Client Integration APIs, you can also generate tokens using the API Keys management interface:
Step 1: Access the API Keys Section

Step 2: Create a New API Key

Step 3: Configure Your API Key
Step 4: Copy Your JWT Token
Step 5: Use Your JWT Token
Authorization: Bearer <your_jwt_token>
Security Best Practices:
Note: The paths shown in this documentation are clean, RESTful representations. The actual implementation paths on your server may differ. Please refer to your route configuration for the exact endpoint URLs to use in your integration.
All endpoints follow a consistent response format:
{
"status": 1, // 1 for success, 0 for error
"data": {}, // Response data (on success)
"message": "", // Success message
"error": "" // Error message (on failure)
}
Manage unit plans for property projects. Create, retrieve, update, and delete unit plan configurations including floor plans, layouts, and property specifications.
Create a comprehensive unit plan with images and metadata
This endpoint allows you to create detailed unit plans including:
File Upload Requirements:
flat and villa_floor unit types, unitplan_image is requiredplot, office and shop unit types, unitplan_image is optional| name required | string Name of the unitplan |
| is_furnished required | boolean Whether the unit is furnished |
| unit_type required | string Enum: "villa" "flat" "villa_floor" "plot" "office" "shop" Type of unit |
| project_id | string ID of the project this unitplan belongs to |
| building_id | string ID of the building this unitplan belongs to |
| type | string Type classification of the unitplan |
| measurement | number Area measurement (required for non-villa_floor types) |
| measurement_type | string Enum: "sqft" "sqmt" Unit of measurement (required for non-villa_floor types) |
| tour_id | string Associated virtual tour ID |
| bedrooms | string Enum: "studio" "1BHK" "2BHK" "3BHK" "4BHK" "5BHK" "6BHK" "7BHK" "8BHK" "9BHK" "10BHK" "0BHK" "penthouse" "townhouse" "podium" "suite" "plot" "office" "shop" "duplex" "1.5BHK" "2.5BHK" "3.5BHK" "4.5BHK" "5.5BHK" "6.5BHK" "7.5BHK" "8.5BHK" "9.5BHK" "10.5BHK" Number of bedrooms (required for non-villa_floor types) |
| is_residential | boolean Whether the unit is residential |
| bathrooms | number Number of bathrooms |
| suite_area | string Suite area measurement |
| suite_area_type | string Enum: "sqft" "sqmt" Suite area measurement unit |
| parent_unitplan | string Parent unitplan ID (required for villa_floor type) |
| order | number Display order |
| scene_id | string Associated scene ID |
| gallery_id | string Associated gallery ID (JSON string) |
| exterior_type | string Enum: "scene" "gallery" Type of exterior view |
| style | string Architectural style |
| balcony_measurement | number Balcony area measurement |
| balcony_measurement_type | string Enum: "sqft" "sqmt" Balcony measurement unit |
| is_commercial | boolean Whether the unit is commercial |
| unitplan_image | string <binary> Unitplan image file (required for flat and villa_floor types) |
{- "status": 1,
- "data": {
- "_id": "507f1f77bcf86cd799439017",
- "project_id": "507f1f77bcf86cd799439011",
- "building_id": "507f1f77bcf86cd799439012",
- "type": "residential",
- "name": "Luxury 3BHK Apartment",
- "measurement": 1250.5,
- "measurement_type": "sqft",
- "tour_id": "507f1f77bcf86cd799439013",
- "bedrooms": "3BHK",
- "is_residential": true,
- "is_commercial": false,
- "bathrooms": 2,
- "is_furnished": true,
- "unit_type": "flat",
- "exterior_type": "scene",
- "scene_id": "507f1f77bcf86cd799439015",
- "gallery_id": [
- "507f1f77bcf86cd799439016"
], - "floor_unitplans": [
- "507f1f77bcf86cd799439019"
], - "style": "modern",
- "balcony_measurement": 50.5,
- "balcony_measurement_type": "sqft",
- "suite_area": "1100",
- "suite_area_type": "sqft",
- "created_at": "2024-01-15T10:30:00Z",
- "updated_at": "2024-01-15T14:45:00Z"
}
}Retrieve all unit plans associated with a specific project
This endpoint returns a comprehensive list of all unit plans within a project, including:
| project_id required | string Example: 507f1f77bcf86cd799439011 The ID of the project to retrieve unitplans for |
{- "status": 1,
- "data": [
- {
- "_id": "507f1f77bcf86cd799439017",
- "project_id": "507f1f77bcf86cd799439011",
- "building_id": "507f1f77bcf86cd799439012",
- "type": "residential",
- "name": "Luxury 3BHK Apartment",
- "measurement": 1250.5,
- "measurement_type": "sqft",
- "tour_id": "507f1f77bcf86cd799439013",
- "bedrooms": "3BHK",
- "is_residential": true,
- "is_commercial": false,
- "bathrooms": 2,
- "is_furnished": true,
- "unit_type": "flat",
- "exterior_type": "scene",
- "scene_id": "507f1f77bcf86cd799439015",
- "gallery_id": [
- "507f1f77bcf86cd799439016"
], - "floor_unitplans": [
- "507f1f77bcf86cd799439019"
], - "style": "modern",
- "balcony_measurement": 50.5,
- "balcony_measurement_type": "sqft",
- "suite_area": "1100",
- "suite_area_type": "sqft",
- "created_at": "2024-01-15T10:30:00Z",
- "updated_at": "2024-01-15T14:45:00Z"
}
]
}Update unit plan details and optionally replace images
This endpoint allows partial updates to existing unit plans. You can:
File Upload Notes:
flat unit type, unitplan_image becomes required| unitplan_id required | string ID of the unitplan to update |
| project_id required | string ID of the project this unitplan belongs to |
| building_id | string ID of the building this unitplan belongs to |
| type | string Type classification of the unitplan |
| name | string Name of the unitplan |
| measurement | number Area measurement |
| measurement_type | string Enum: "sqft" "sqmt" Unit of measurement |
| tour_id | string Associated virtual tour ID |
| bedrooms | string Enum: "studio" "1BHK" "2BHK" "3BHK" "4BHK" "5BHK" "6BHK" "7BHK" "8BHK" "9BHK" "10BHK" "0BHK" "penthouse" "townhouse" "podium" "suite" "plot" "office" "shop" "duplex" "1.5BHK" "2.5BHK" "3.5BHK" "4.5BHK" "5.5BHK" "6.5BHK" "7.5BHK" "8.5BHK" "9.5BHK" "10.5BHK" Number of bedrooms |
| is_residential | boolean Whether the unit is residential |
| bathrooms | number Number of bathrooms |
| is_furnished | boolean Whether the unit is furnished |
| unit_type | string Enum: "villa" "flat" "villa_floor" "plot" "office" "shop" Type of unit |
| suite_area | string Suite area measurement |
| suite_area_type | string Enum: "sqft" "sqmt" Suite area measurement unit |
| scene_id | string Associated scene ID |
| gallery_id | string Associated gallery ID (JSON string) |
| floor_unitplans | string Floor unitplans (JSON string) |
| exterior_type | string Enum: "scene" "gallery" Type of exterior view |
| style | string Architectural style |
| balcony_measurement | number Balcony area measurement |
| balcony_measurement_type | string Enum: "sqft" "sqmt" Balcony measurement unit |
| is_commercial | boolean Whether the unit is commercial |
| unitplan_image | string <binary> Updated unitplan image file (required when changing unit_type to flat) |
{- "status": 1,
- "data": {
- "_id": "507f1f77bcf86cd799439017",
- "project_id": "507f1f77bcf86cd799439011",
- "building_id": "507f1f77bcf86cd799439012",
- "type": "residential",
- "name": "Luxury 3BHK Apartment",
- "measurement": 1250.5,
- "measurement_type": "sqft",
- "tour_id": "507f1f77bcf86cd799439013",
- "bedrooms": "3BHK",
- "is_residential": true,
- "is_commercial": false,
- "bathrooms": 2,
- "is_furnished": true,
- "unit_type": "flat",
- "exterior_type": "scene",
- "scene_id": "507f1f77bcf86cd799439015",
- "gallery_id": [
- "507f1f77bcf86cd799439016"
], - "floor_unitplans": [
- "507f1f77bcf86cd799439019"
], - "style": "modern",
- "balcony_measurement": 50.5,
- "balcony_measurement_type": "sqft",
- "suite_area": "1100",
- "suite_area_type": "sqft",
- "created_at": "2024-01-15T10:30:00Z",
- "updated_at": "2024-01-15T14:45:00Z"
}
}Safely delete a unit plan and move it to trash
This endpoint performs a soft delete by moving the unitplan to trash rather than permanently deleting it. The operation:
| project_id required | string Example: 507f1f77bcf86cd799439011 The ID of the project containing the unitplan |
| unitplan_id required | string ID of the unitplan to delete |
{- "unitplan_id": "507f1f77bcf86cd799439017"
}{- "status": 1,
- "message": "Unitplan deleted successfully. Please update the following units that were linked to this unitplan",
- "linkedUnits": [
- "Unit A-101",
- "Unit A-102"
], - "unitCount": 2
}Handle individual property units within projects. Filter, update, and manage unit status, pricing, metadata, and collection operations for real estate properties.
Create and process filter units for a specific project. This endpoint allows you to:
| authorization required | string Example: Bearer your_jwt_token_here API key for authentication |
| project_id required | string Unique identifier of the project |
| units required | Array of strings Array of unit names to process |
| status required | string New status for the unit. Must be a valid status defined in your project's Settings → Status configuration. |
| price | string^[0-9]+(\.[0-9]+)?$ Price for the units (optional, numeric string) |
| currency | string Enum: "aed" "ars" "aud" "bgn" "brl" "bsd" "cad" "chf" "clp" "cny" "cop" "czk" "dkk" "dop" "egp" "eur" "fjd" "gbp" "gtq" "hkd" "hrk" "huf" "idr" "ils" "inr" "isk" "jpy" "krw" "kzt" "mxn" "myr" "nok" "nzd" "pab" "pen" "php" "pkr" "pln" "pyg" "ron" "rub" "sek" "sgd" "thb" "try" "twd" "uah" "usd" "uyu" "vnd" "zar" Currency code for the price (optional) |
{- "project_id": "507f1f77bcf86cd799439011",
- "units": [
- "Unit-A101",
- "Unit-A102",
- "Unit-B201"
], - "status": "available",
- "price": "750000",
- "currency": "usd"
}{- "status": 1,
- "data": {
- "successful": [
- "Unit-A101",
- "Unit-A102"
], - "failed": [ ],
- "sessionId": "session_507f1f77bcf86cd799439011"
}, - "message": "Units processed successfully",
- "error": "string"
}Drop (delete) unit collection filters for a specific project and session. This endpoint allows you to:
| authorization required | string Example: Bearer your_jwt_token_here API key for authentication |
| project_id required | string Unique identifier of the project |
| session_id required | string Session identifier for the unit collection to drop |
{- "project_id": "507f1f77bcf86cd799439011",
- "session_id": "session_507f1f77bcf86cd799439011"
}{- "status": 1,
- "message": "Collection Dropped Successfully !"
}Update unit information using metadata for a specific project. This endpoint allows you to:
| project_id required | string Example: 507f1f77bcf86cd799439011 Project ID to identify which project the unit belongs to |
| status required | string New status for the unit. Must be a valid status defined in your project's Settings → Status configuration. |
required | object non-empty Metadata object used to identify and match the unit |
| price | string^[0-9]+(\.[0-9]+)?$ New price for the unit (numeric string) |
| currency | string Enum: "aed" "ars" "aud" "bgn" "brl" "bsd" "cad" "chf" "clp" "cny" "cop" "czk" "dkk" "dop" "egp" "eur" "fjd" "gbp" "gtq" "hkd" "hrk" "huf" "idr" "ils" "inr" "isk" "jpy" "krw" "kzt" "lbp" "mxn" "myr" "nok" "nzd" "pab" "pen" "php" "pkr" "pln" "pyg" "qar" "ron" "rub" "sar" "sek" "sgd" "thb" "try" "twd" "uah" "usd" "uyu" "vnd" "zar" "jod" "" Currency code for the price |
| measurement | number Unit measurement/area |
| measurement_type | string Enum: "sqft" "sqmt" Type of measurement unit |
[- {
- "metadata": {
- "unit_number": "A101",
- "floor": "1",
- "building": "Tower A"
}, - "status": "reserved",
- "price": "850000",
- "currency": "usd"
}
]{- "status": 1,
- "message": "updated unit successfully"
}Webhook events for leads. When you subscribe to lead events, PropVR POSTs payloads to your targetUrl on lead_created, lead_updated, and lead_deleted events.
| _id | string Lead document ID |
| session_id | string Session ID the lead is associated with |
| organization_id | string Organization ID |
| name | string Lead name |
| phone_number | string Lead phone number |
string <email> Lead email | |
| duration_minutes | number Duration in minutes (e.g. session duration) |
| joining_time | string <date-time> When the lead joined (ISO 8601) |
| interested_in | Array of arrays Array of interest objects (e.g. project/unit interest) |
| lead_product_interest | string Product interest category |
| lead_industry_type | string Industry type |
| lead_source | string Source of the lead (e.g. sales_session, dashboard) |
| start_time | string <date-time> Start time (ISO 8601) |
| user_id | string User ID associated with the lead |
| next_interaction_time | string <date-time> Next interaction timestamp |
| last_interaction_time | string <date-time> Last interaction timestamp |
| end_time | string <date-time> End time (ISO 8601) |
| lead_creation_time | string <date-time> When the lead was created |
| lead_status | string Lead status (e.g. new, contacted) |
| thread_id | string Thread/conversation identifier |
{- "_id": "string",
- "session_id": "string",
- "organization_id": "string",
- "name": "string",
- "phone_number": "string",
- "duration_minutes": 0,
- "joining_time": "2019-08-24T14:15:22Z",
- "interested_in": [ ],
- "lead_product_interest": "string",
- "lead_industry_type": "string",
- "lead_source": "string",
- "start_time": "2019-08-24T14:15:22Z",
- "user_id": "string",
- "next_interaction_time": "2019-08-24T14:15:22Z",
- "last_interaction_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "lead_creation_time": "2019-08-24T14:15:22Z",
- "lead_status": "string",
- "thread_id": "string"
}{- "_id": "507f1f77bcf86cd799439022",
- "session_id": "session_abc",
- "organization_id": "org_xyz",
- "name": "John Doe",
- "phone_number": "+1234567890",
- "duration_minutes": 15,
- "joining_time": "2024-06-15T10:00:00.000Z",
- "interested_in": [ ],
- "lead_product_interest": "residential",
- "lead_industry_type": "real_estate",
- "lead_source": "sales_session",
- "start_time": "2024-06-15T10:00:00.000Z",
- "user_id": "user_001",
- "next_interaction_time": "2024-06-16T10:00:00.000Z",
- "last_interaction_time": "2024-06-15T10:15:00.000Z",
- "end_time": "2024-06-15T10:15:00.000Z",
- "lead_creation_time": "2024-06-15T10:00:00.000Z",
- "lead_status": "new",
- "thread_id": "thread_abc"
}| _id | string Lead document ID |
| session_id | string Session ID the lead is associated with |
| organization_id | string Organization ID |
| name | string Lead name |
| phone_number | string Lead phone number |
string <email> Lead email | |
| duration_minutes | number Duration in minutes (e.g. session duration) |
| joining_time | string <date-time> When the lead joined (ISO 8601) |
| interested_in | Array of arrays Array of interest objects (e.g. project/unit interest) |
| lead_product_interest | string Product interest category |
| lead_industry_type | string Industry type |
| lead_source | string Source of the lead (e.g. sales_session, dashboard) |
| start_time | string <date-time> Start time (ISO 8601) |
| user_id | string User ID associated with the lead |
| next_interaction_time | string <date-time> Next interaction timestamp |
| last_interaction_time | string <date-time> Last interaction timestamp |
| end_time | string <date-time> End time (ISO 8601) |
| lead_creation_time | string <date-time> When the lead was created |
| lead_status | string Lead status (e.g. new, contacted) |
| thread_id | string Thread/conversation identifier |
{- "_id": "string",
- "session_id": "string",
- "organization_id": "string",
- "name": "string",
- "phone_number": "string",
- "duration_minutes": 0,
- "joining_time": "2019-08-24T14:15:22Z",
- "interested_in": [ ],
- "lead_product_interest": "string",
- "lead_industry_type": "string",
- "lead_source": "string",
- "start_time": "2019-08-24T14:15:22Z",
- "user_id": "string",
- "next_interaction_time": "2019-08-24T14:15:22Z",
- "last_interaction_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "lead_creation_time": "2019-08-24T14:15:22Z",
- "lead_status": "string",
- "thread_id": "string"
}{- "_id": "507f1f77bcf86cd799439022",
- "session_id": "session_abc",
- "organization_id": "org_xyz",
- "name": "John Doe",
- "phone_number": "+1234567890",
- "duration_minutes": 20,
- "joining_time": "2024-06-15T10:00:00.000Z",
- "interested_in": [ ],
- "lead_product_interest": "residential",
- "lead_industry_type": "real_estate",
- "lead_source": "sales_session",
- "start_time": "2024-06-15T10:00:00.000Z",
- "user_id": "user_001",
- "next_interaction_time": "2024-06-16T10:00:00.000Z",
- "last_interaction_time": "2024-06-15T10:20:00.000Z",
- "end_time": "2024-06-15T10:20:00.000Z",
- "lead_creation_time": "2024-06-15T10:00:00.000Z",
- "lead_status": "contacted",
- "thread_id": "thread_abc"
}| _id | string Lead document ID |
| session_id | string Session ID the lead is associated with |
| organization_id | string Organization ID |
| name | string Lead name |
| phone_number | string Lead phone number |
string <email> Lead email | |
| duration_minutes | number Duration in minutes (e.g. session duration) |
| joining_time | string <date-time> When the lead joined (ISO 8601) |
| interested_in | Array of arrays Array of interest objects (e.g. project/unit interest) |
| lead_product_interest | string Product interest category |
| lead_industry_type | string Industry type |
| lead_source | string Source of the lead (e.g. sales_session, dashboard) |
| start_time | string <date-time> Start time (ISO 8601) |
| user_id | string User ID associated with the lead |
| next_interaction_time | string <date-time> Next interaction timestamp |
| last_interaction_time | string <date-time> Last interaction timestamp |
| end_time | string <date-time> End time (ISO 8601) |
| lead_creation_time | string <date-time> When the lead was created |
| lead_status | string Lead status (e.g. new, contacted) |
| thread_id | string Thread/conversation identifier |
{- "_id": "string",
- "session_id": "string",
- "organization_id": "string",
- "name": "string",
- "phone_number": "string",
- "duration_minutes": 0,
- "joining_time": "2019-08-24T14:15:22Z",
- "interested_in": [ ],
- "lead_product_interest": "string",
- "lead_industry_type": "string",
- "lead_source": "string",
- "start_time": "2019-08-24T14:15:22Z",
- "user_id": "string",
- "next_interaction_time": "2019-08-24T14:15:22Z",
- "last_interaction_time": "2019-08-24T14:15:22Z",
- "end_time": "2019-08-24T14:15:22Z",
- "lead_creation_time": "2019-08-24T14:15:22Z",
- "lead_status": "string",
- "thread_id": "string"
}{- "_id": "507f1f77bcf86cd799439022",
- "session_id": "session_abc",
- "organization_id": "org_xyz",
- "name": "John Doe",
- "phone_number": "+1234567890",
- "duration_minutes": 15,
- "joining_time": "2024-06-15T10:00:00.000Z",
- "interested_in": [ ],
- "lead_product_interest": "residential",
- "lead_industry_type": "real_estate",
- "lead_source": "sales_session",
- "start_time": "2024-06-15T10:00:00.000Z",
- "user_id": "user_001",
- "next_interaction_time": "2024-06-16T10:00:00.000Z",
- "last_interaction_time": "2024-06-15T10:15:00.000Z",
- "end_time": "2024-06-15T10:15:00.000Z",
- "lead_creation_time": "2024-06-15T10:00:00.000Z",
- "lead_status": "new",
- "thread_id": "thread_abc"
}Webhook events for sessions. When you subscribe to session events, PropVR POSTs payloads to your targetUrl on session_created, session_updated, and session_deleted events.
| _id | string Session document ID |
| duration_minutes | number Session duration in minutes |
| status | string Enum: "scheduled" "active" "on-going" "ended" "on-hold" "cancelled" Session status (e.g. scheduled, active, ended, cancelled) |
| pixel_duration_minutes | number Pixel-streaming duration in minutes |
| code | string Session code |
| start | string <date-time> Session start time (ISO 8601) |
| type | string Session type (e.g. default, pixel_streaming) |
| scheduled_end_time | string <date-time> Scheduled end time |
| invite_link | string Invite link URL |
| organization_id | string Organization ID |
| user_id | string User ID |
| project_id | string Project ID |
| source | string Session source (e.g. dashboard, api) |
| last_interaction_time | string <date-time> Last interaction timestamp |
| config | object Session configuration object |
| is_scheduled | boolean Whether the session is scheduled |
| schedule_time | string <date-time> Schedule time (ISO 8601) |
| end_time | string End time |
| instance_start_time | string or null <date-time> Actual instance start time |
| instance_end_time | string or null <date-time> Actual instance end time |
| description | string Session description |
| participants | Array of arrays Array of participant/lead objects |
| thread_id | string Thread identifier |
| tag | string or null Optional tag |
| is_pixelstreaming_active | boolean Whether pixel streaming is active |
| pixel_streaming_link | string or null Pixel streaming URL |
| is_reserved | boolean Whether the session is reserved |
{- "_id": "string",
- "duration_minutes": 0,
- "status": "scheduled",
- "pixel_duration_minutes": 0,
- "code": "string",
- "start": "2019-08-24T14:15:22Z",
- "type": "string",
- "scheduled_end_time": "2019-08-24T14:15:22Z",
- "invite_link": "string",
- "organization_id": "string",
- "user_id": "string",
- "project_id": "string",
- "source": "string",
- "last_interaction_time": "2019-08-24T14:15:22Z",
- "config": { },
- "is_scheduled": true,
- "schedule_time": "2019-08-24T14:15:22Z",
- "end_time": "string",
- "instance_start_time": "2019-08-24T14:15:22Z",
- "instance_end_time": "2019-08-24T14:15:22Z",
- "description": "string",
- "participants": [ ],
- "thread_id": "string",
- "tag": "string",
- "is_pixelstreaming_active": true,
- "pixel_streaming_link": "string",
- "is_reserved": true
}{- "_id": "507f1f77bcf86cd799439033",
- "duration_minutes": 30,
- "status": "scheduled",
- "pixel_duration_minutes": 0,
- "code": "SESSION001",
- "start": "2024-06-15T10:00:00.000Z",
- "type": "pixel_streaming",
- "scheduled_end_time": "2024-06-15T10:30:00.000Z",
- "organization_id": "org_xyz",
- "user_id": "user_001",
- "project_id": "proj_abc",
- "source": "dashboard",
- "last_interaction_time": "2024-06-15T10:00:00.000Z",
- "config": { },
- "is_scheduled": true,
- "schedule_time": "2024-06-15T10:00:00.000Z",
- "end_time": "",
- "instance_start_time": null,
- "instance_end_time": null,
- "description": "Property viewing session",
- "participants": [ ],
- "thread_id": "thread_xyz",
- "tag": null,
- "is_pixelstreaming_active": false,
- "pixel_streaming_link": null,
- "is_reserved": false
}| _id | string Session document ID |
| duration_minutes | number Session duration in minutes |
| status | string Enum: "scheduled" "active" "on-going" "ended" "on-hold" "cancelled" Session status (e.g. scheduled, active, ended, cancelled) |
| pixel_duration_minutes | number Pixel-streaming duration in minutes |
| code | string Session code |
| start | string <date-time> Session start time (ISO 8601) |
| type | string Session type (e.g. default, pixel_streaming) |
| scheduled_end_time | string <date-time> Scheduled end time |
| invite_link | string Invite link URL |
| organization_id | string Organization ID |
| user_id | string User ID |
| project_id | string Project ID |
| source | string Session source (e.g. dashboard, api) |
| last_interaction_time | string <date-time> Last interaction timestamp |
| config | object Session configuration object |
| is_scheduled | boolean Whether the session is scheduled |
| schedule_time | string <date-time> Schedule time (ISO 8601) |
| end_time | string End time |
| instance_start_time | string or null <date-time> Actual instance start time |
| instance_end_time | string or null <date-time> Actual instance end time |
| description | string Session description |
| participants | Array of arrays Array of participant/lead objects |
| thread_id | string Thread identifier |
| tag | string or null Optional tag |
| is_pixelstreaming_active | boolean Whether pixel streaming is active |
| pixel_streaming_link | string or null Pixel streaming URL |
| is_reserved | boolean Whether the session is reserved |
{- "_id": "string",
- "duration_minutes": 0,
- "status": "scheduled",
- "pixel_duration_minutes": 0,
- "code": "string",
- "start": "2019-08-24T14:15:22Z",
- "type": "string",
- "scheduled_end_time": "2019-08-24T14:15:22Z",
- "invite_link": "string",
- "organization_id": "string",
- "user_id": "string",
- "project_id": "string",
- "source": "string",
- "last_interaction_time": "2019-08-24T14:15:22Z",
- "config": { },
- "is_scheduled": true,
- "schedule_time": "2019-08-24T14:15:22Z",
- "end_time": "string",
- "instance_start_time": "2019-08-24T14:15:22Z",
- "instance_end_time": "2019-08-24T14:15:22Z",
- "description": "string",
- "participants": [ ],
- "thread_id": "string",
- "tag": "string",
- "is_pixelstreaming_active": true,
- "pixel_streaming_link": "string",
- "is_reserved": true
}{- "_id": "507f1f77bcf86cd799439033",
- "duration_minutes": 30,
- "status": "active",
- "pixel_duration_minutes": 15,
- "code": "SESSION001",
- "start": "2024-06-15T10:00:00.000Z",
- "type": "pixel_streaming",
- "scheduled_end_time": "2024-06-15T10:30:00.000Z",
- "organization_id": "org_xyz",
- "user_id": "user_001",
- "project_id": "proj_abc",
- "source": "dashboard",
- "last_interaction_time": "2024-06-15T10:15:00.000Z",
- "config": { },
- "is_scheduled": true,
- "schedule_time": "2024-06-15T10:00:00.000Z",
- "end_time": "",
- "instance_start_time": "2024-06-15T10:00:00.000Z",
- "instance_end_time": null,
- "description": "Property viewing session",
- "participants": [ ],
- "thread_id": "thread_xyz",
- "tag": null,
- "is_pixelstreaming_active": true,
- "is_reserved": false
}| _id | string Session document ID |
| duration_minutes | number Session duration in minutes |
| status | string Enum: "scheduled" "active" "on-going" "ended" "on-hold" "cancelled" Session status (e.g. scheduled, active, ended, cancelled) |
| pixel_duration_minutes | number Pixel-streaming duration in minutes |
| code | string Session code |
| start | string <date-time> Session start time (ISO 8601) |
| type | string Session type (e.g. default, pixel_streaming) |
| scheduled_end_time | string <date-time> Scheduled end time |
| invite_link | string Invite link URL |
| organization_id | string Organization ID |
| user_id | string User ID |
| project_id | string Project ID |
| source | string Session source (e.g. dashboard, api) |
| last_interaction_time | string <date-time> Last interaction timestamp |
| config | object Session configuration object |
| is_scheduled | boolean Whether the session is scheduled |
| schedule_time | string <date-time> Schedule time (ISO 8601) |
| end_time | string End time |
| instance_start_time | string or null <date-time> Actual instance start time |
| instance_end_time | string or null <date-time> Actual instance end time |
| description | string Session description |
| participants | Array of arrays Array of participant/lead objects |
| thread_id | string Thread identifier |
| tag | string or null Optional tag |
| is_pixelstreaming_active | boolean Whether pixel streaming is active |
| pixel_streaming_link | string or null Pixel streaming URL |
| is_reserved | boolean Whether the session is reserved |
{- "_id": "string",
- "duration_minutes": 0,
- "status": "scheduled",
- "pixel_duration_minutes": 0,
- "code": "string",
- "start": "2019-08-24T14:15:22Z",
- "type": "string",
- "scheduled_end_time": "2019-08-24T14:15:22Z",
- "invite_link": "string",
- "organization_id": "string",
- "user_id": "string",
- "project_id": "string",
- "source": "string",
- "last_interaction_time": "2019-08-24T14:15:22Z",
- "config": { },
- "is_scheduled": true,
- "schedule_time": "2019-08-24T14:15:22Z",
- "end_time": "string",
- "instance_start_time": "2019-08-24T14:15:22Z",
- "instance_end_time": "2019-08-24T14:15:22Z",
- "description": "string",
- "participants": [ ],
- "thread_id": "string",
- "tag": "string",
- "is_pixelstreaming_active": true,
- "pixel_streaming_link": "string",
- "is_reserved": true
}{- "_id": "507f1f77bcf86cd799439033",
- "duration_minutes": 30,
- "status": "cancelled",
- "pixel_duration_minutes": 0,
- "code": "SESSION001",
- "start": "2024-06-15T10:00:00.000Z",
- "type": "pixel_streaming",
- "scheduled_end_time": "2024-06-15T10:30:00.000Z",
- "organization_id": "org_xyz",
- "user_id": "user_001",
- "project_id": "proj_abc",
- "source": "dashboard",
- "last_interaction_time": "2024-06-15T10:30:00.000Z",
- "config": { },
- "is_scheduled": true,
- "schedule_time": "2024-06-15T10:00:00.000Z",
- "end_time": "2024-06-15T10:30:00.000Z",
- "instance_start_time": "2024-06-15T10:00:00.000Z",
- "instance_end_time": "2024-06-15T10:30:00.000Z",
- "description": "Property viewing session",
- "participants": [ ],
- "thread_id": "thread_xyz",
- "tag": null,
- "is_pixelstreaming_active": false,
- "pixel_streaming_link": null,
- "is_reserved": false
}Webhook events for property units. When you subscribe to unit events, PropVR POSTs payloads to your targetUrl on unit_created, unit_updated, and unit_deleted. Include rules.allowed_projects (array of project IDs) when creating the webhook so only events for those projects are sent.
Rules: During webhook subscription, specify rules.allowed_projects as an array of project IDs. Only unit events from those projects will trigger the webhook.
| _id | string Unit document ID |
| unitplan_id | string Associated unit plan ID |
| project_id | string Project ID the unit belongs to |
| name | string Unit name/label |
| status | string Unit status. Can be any status defined in Design settings → Status (project-specific, not a fixed enum). |
| metadata | object Custom key-value metadata for the unit |
| building_id | string Building identifier |
| floor | string Floor label |
| floor_id | string Floor identifier |
| price | string Unit price as string |
| max_price | string Maximum price as string |
| community_id | string Community identifier |
| currency | string Currency code (e.g. usd, inr) |
| tour_id | string Virtual tour ID |
| measurement | number Area measurement value |
| measurement_type | string Unit of measurement (e.g. sqft, sqmt) |
| cta_link | string Call-to-action URL |
| balcony_measurement | number Balcony area measurement |
| balcony_measurement_type | string Balcony measurement unit |
| suite_area | number Suite area value |
| suite_area_type | string Suite area unit |
| direction | string or null Unit direction (e.g. north, south) |
| created_at | string <date-time> Creation timestamp (ISO 8601) |
{- "_id": "string",
- "unitplan_id": "string",
- "project_id": "string",
- "name": "string",
- "status": "string",
- "metadata": { },
- "building_id": "string",
- "floor": "string",
- "floor_id": "string",
- "price": "string",
- "max_price": "string",
- "community_id": "string",
- "currency": "string",
- "tour_id": "string",
- "measurement": 0,
- "measurement_type": "string",
- "cta_link": "string",
- "balcony_measurement": 0,
- "balcony_measurement_type": "string",
- "suite_area": 0,
- "suite_area_type": "string",
- "direction": "string",
- "created_at": "2019-08-24T14:15:22Z"
}{- "_id": "507f1f77bcf86cd799439011",
- "unitplan_id": "507f1f77bcf86cd799439012",
- "project_id": "proj_abc123",
- "name": "Unit 101",
- "status": "available",
- "metadata": { },
- "building_id": "bld_001",
- "floor": "1",
- "floor_id": "floor_001",
- "price": "1000000",
- "max_price": "1200000",
- "community_id": "comm_001",
- "currency": "usd",
- "tour_id": "tour_abc123",
- "measurement": 1250,
- "measurement_type": "sqft",
- "balcony_measurement": 100,
- "balcony_measurement_type": "sqft",
- "suite_area": 1150,
- "suite_area_type": "sqft",
- "direction": "north",
- "created_at": "2024-06-15T10:00:00.000Z"
}Rules: During webhook subscription, specify rules.allowed_projects as an array of project IDs. Only unit events from those projects will trigger the webhook.
| _id | string Unit document ID |
| unitplan_id | string Associated unit plan ID |
| project_id | string Project ID the unit belongs to |
| name | string Unit name/label |
| status | string Unit status. Can be any status defined in Design settings → Status (project-specific, not a fixed enum). |
| metadata | object Custom key-value metadata for the unit |
| building_id | string Building identifier |
| floor | string Floor label |
| floor_id | string Floor identifier |
| price | string Unit price as string |
| max_price | string Maximum price as string |
| community_id | string Community identifier |
| currency | string Currency code (e.g. usd, inr) |
| tour_id | string Virtual tour ID |
| measurement | number Area measurement value |
| measurement_type | string Unit of measurement (e.g. sqft, sqmt) |
| cta_link | string Call-to-action URL |
| balcony_measurement | number Balcony area measurement |
| balcony_measurement_type | string Balcony measurement unit |
| suite_area | number Suite area value |
| suite_area_type | string Suite area unit |
| direction | string or null Unit direction (e.g. north, south) |
| created_at | string <date-time> Creation timestamp (ISO 8601) |
{- "_id": "string",
- "unitplan_id": "string",
- "project_id": "string",
- "name": "string",
- "status": "string",
- "metadata": { },
- "building_id": "string",
- "floor": "string",
- "floor_id": "string",
- "price": "string",
- "max_price": "string",
- "community_id": "string",
- "currency": "string",
- "tour_id": "string",
- "measurement": 0,
- "measurement_type": "string",
- "cta_link": "string",
- "balcony_measurement": 0,
- "balcony_measurement_type": "string",
- "suite_area": 0,
- "suite_area_type": "string",
- "direction": "string",
- "created_at": "2019-08-24T14:15:22Z"
}{- "_id": "507f1f77bcf86cd799439011",
- "unitplan_id": "507f1f77bcf86cd799439012",
- "project_id": "proj_abc123",
- "name": "Unit 101",
- "status": "reserved",
- "metadata": { },
- "building_id": "bld_001",
- "floor": "1",
- "floor_id": "floor_001",
- "price": "950000",
- "max_price": "1200000",
- "community_id": "comm_001",
- "currency": "usd",
- "tour_id": "tour_abc123",
- "measurement": 1250,
- "measurement_type": "sqft",
- "balcony_measurement": 100,
- "balcony_measurement_type": "sqft",
- "suite_area": 1150,
- "suite_area_type": "sqft",
- "direction": "north",
- "created_at": "2024-06-15T10:00:00.000Z"
}Rules: During webhook subscription, specify rules.allowed_projects as an array of project IDs. Only unit events from those projects will trigger the webhook.
| _id | string Unit document ID that was deleted |
| result | string Deletion result message |
{- "_id": "string",
- "result": "unit deleted"
}{- "_id": "507f1f77bcf86cd799439011",
- "result": "unit deleted"
}This guide documents how to embed the Weblite experience into your website using an <iframe>.
It covers basic embedding, responsive styling, language switching, and currency configuration.
Quick Start
Embed Weblite into your webpage using the following iframe:
<iframe
src="https://view.propvr.tech/en/<project-link>"
class="viewer__iframe"
allowfullscreen
loading="lazy"
></iframe>
Replace <project-link> with the Weblite URL shared with you.
1. Basic HTML Embed
Use this HTML structure for a clean, full-screen experience:
<html>
<body style="margin:0; overflow:hidden;">
<div class="viewer">
<iframe
id="vrframe"
src="<project-link>"
class="viewer__iframe"
allowfullscreen
frameborder="0"
loading="lazy"
></iframe>
</div>
</body>
</html>
2. Responsive Styling (Recommended)
Add the following CSS to ensure proper scaling and responsiveness:
.viewer__iframe {
width: 100%;
height: 100%;
}
iframe {
border: none;
}
Ensure the iframe's parent container has sufficient height (e.g. height: 100vh or a fixed height container).
3. Language Switching
Weblite supports multiple languages. To load a specific language, add the language code directly after the domain.
URL Format
https://view.propvr.tech/{language-code}/{project-link}
Examples
https://view.propvr.tech/en/<project-link>https://view.propvr.tech/ar/<project-link>iFrame Example
<iframe
src="https://view.propvr.tech/fr/<project-link>"
class="viewer__iframe"
allowfullscreen
></iframe>
See Appendix A below for the full list.
4. Currency Switching
Prices can be displayed in different currencies by passing a query parameter.
URL Format
?currency=<currency-code>
Examples
?currency=inr?currency=usd?currency=aediFrame Example
<iframe
src="https://view.propvr.tech/en/<project-link>?currency=usd"
class="viewer__iframe"
allowfullscreen
></iframe>
See Appendix B below for the full list.
5. Best Practices
<project-link> with the Weblite URL provided to youallowfullscreen enabled for immersive experienceloading="lazy" for better performanceAppendix A – Supported Languages
Weblite supports a wide range of languages. Below is the master list of supported language codes:
| Code | Language |
|---|---|
| en | English |
| ar | Arabic |
| fr | French |
| fr_FR | French (France) |
| fr_CA | French (Canada) |
| hi | Hindi |
| zh_CN | Chinese (Simplified) |
| zh_TW | Chinese (Traditional) |
| de | German |
| es | Spanish |
| pt | Portuguese |
| pt_BR | Portuguese (Brazil) |
| ru | Russian |
| ja | Japanese |
| ko | Korean |
| it | Italian |
| nl | Dutch |
| sv | Swedish |
| tr | Turkish |
| ur | Urdu |
| ta | Tamil |
| te | Telugu |
| ml | Malayalam |
| kn | Kannada |
| mr | Marathi |
| bn | Bengali |
| gu | Gujarati |
| pa | Punjabi |
| fa | Persian |
| he | Hebrew |
| th | Thai |
| vi | Vietnamese |
| id | Indonesian |
| sw | Swahili |
| zu | Zulu |
Appendix B – Supported Currencies
The following currencies are supported:
AED, ARS, AUD, BGN, BRL, BSD, CAD, CHF, CLP, CNY, COP, CZK, DKK, DOP, EGP, EUR, FJD, GBP, GTQ, HKD, HRK, HUF, IDR, ILS, INR, ISK, JPY, KRW, KZT, MXN, MYR, NOK, NZD, PAB, PEN, PHP, PKR, PLN, PYG, RON, RUB, SAR, SEK, SGD, THB, TRY, TWD, UAH, USD, UYU, VND, ZAR, LBP, QAR, JOD