PropVR Unified API (1.0.0)

Download OpenAPI specification:

PropVR Unified API Documentation

This comprehensive API provides both dashboard management and client integration capabilities for PropVR's platform with the following features:

Authentication

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:

How to Create a JWT Token

Step 1: Access the API Keys Section

  • Navigate to the Settings page in your PropVR dashboard
  • Click on the "API Keys" tab in the settings interface
  • You will see the API Keys management interface with:
    • A list of existing API keys (if any)
    • Status indicators (Active/Inactive)
    • Creation and expiration dates
    • A blue "+ Create API Key" button

API Keys Management Interface

Step 2: Create a New API Key

  • Click the blue "+ Create API Key" button
  • A modal dialog will appear with the title "Create API Key"

Create API Key Modal

Step 3: Configure Your API Key

  • In the modal dialog, you will see:
    • API Name field (required) - Enter a descriptive name
    • Cancel button (gray) - To close without creating
    • Create button (blue) - To generate the token
  • Enter a descriptive name for your API key in the "API Name" field
    • Examples: "Production API", "Development Testing", "External Integration"
  • Click the blue "Create" button to generate the token

Step 4: Copy Your JWT Token

  • IMPORTANT: The JWT token will be displayed only once immediately after creation
  • Copy the token immediately and store it securely
  • Once you close the modal, the token will no longer be visible
  • If you lose the token, you'll need to create a new API key

Step 5: Use Your JWT Token

  • Include the token in the Authorization header of your API requests:
Authorization: Bearer <your_jwt_token>

Security Best Practices:

  • Store your JWT token securely and never share it publicly
  • Regularly rotate your API keys for enhanced security

Click Here to Generate JWT Token

API Paths

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.

Response Format

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)
}

Unitplans

Manage unit plans for property projects. Create, retrieve, update, and delete unit plan configurations including floor plans, layouts, and property specifications.

Create a new unitplan

Create a comprehensive unit plan with images and metadata

This endpoint allows you to create detailed unit plans including:

  • Basic information (name, type, measurements)
  • Image uploads (unitplan images with automatic thumbnail generation)
  • Property details (bedrooms, bathrooms, furnishing status)
  • Commercial/residential classification
  • Tour and gallery associations

File Upload Requirements:

  • For flat and villa_floor unit types, unitplan_image is required
  • For plot, office and shop unit types, unitplan_image is optional
  • Images are automatically resized to generate thumbnails (1280x720)
  • Supported formats: JPG, PNG
Authorizations:
BearerAuth
Request Body schema: multipart/form-data
required
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)

Responses

Response samples

Content type
application/json
{
  • "status": 1,
  • "data": {
    }
}

Get all unitplans for a project

Retrieve all unit plans associated with a specific project

This endpoint returns a comprehensive list of all unit plans within a project, including:

  • Basic unitplan information
  • Image URLs and thumbnails
  • Measurements and specifications
  • Associated tours and galleries
Authorizations:
BearerAuth
path Parameters
project_id
required
string
Example: 507f1f77bcf86cd799439011

The ID of the project to retrieve unitplans for

Responses

Response samples

Content type
application/json
{
  • "status": 1,
  • "data": [
    ]
}

Update an existing unitplan

Update unit plan details and optionally replace images

This endpoint allows partial updates to existing unit plans. You can:

  • Update any combination of unitplan properties
  • Replace images (with automatic thumbnail generation)
  • Modify measurements, classifications, and associations
  • Update gallery and tour links

File Upload Notes:

  • Image uploads are optional for updates
  • When updating to flat unit type, unitplan_image becomes required
  • New images automatically generate resized thumbnails
Authorizations:
BearerAuth
Request Body schema: multipart/form-data
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)

Responses

Response samples

Content type
application/json
{
  • "status": 1,
  • "data": {
    }
}

Delete a unitplan

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:

  • Moves the unitplan to trash with a timestamp
  • Checks for linked units and provides warnings
  • Returns information about affected units
Authorizations:
BearerAuth
path Parameters
project_id
required
string
Example: 507f1f77bcf86cd799439011

The ID of the project containing the unitplan

Request Body schema: application/json
required
unitplan_id
required
string

ID of the unitplan to delete

Responses

Request samples

Content type
application/json
{
  • "unitplan_id": "507f1f77bcf86cd799439017"
}

Response samples

Content type
application/json
{
  • "status": 1,
  • "message": "Unitplan deleted successfully. Please update the following units that were linked to this unitplan",
  • "linkedUnits": [
    ],
  • "unitCount": 2
}

Units

Handle individual property units within projects. Filter, update, and manage unit status, pricing, metadata, and collection operations for real estate properties.

Create Filter Units

Create and process filter units for a specific project. This endpoint allows you to:

  • Process multiple units by name
  • Update unit status
  • Set pricing and currency information
  • Bulk process units with filtering capabilities
Authorizations:
BearerAuth
header Parameters
authorization
required
string
Example: Bearer your_jwt_token_here

API key for authentication

Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "project_id": "507f1f77bcf86cd799439011",
  • "units": [
    ],
  • "status": "available",
  • "price": "750000",
  • "currency": "usd"
}

Response samples

Content type
application/json
{
  • "status": 1,
  • "data": {
    },
  • "message": "Units processed successfully",
  • "error": "string"
}

Drop Unit Collection Filters

Drop (delete) unit collection filters for a specific project and session. This endpoint allows you to:

  • Remove all filtered units from a specific session
  • Clean up temporary unit collections
  • Reset filter states for a project session
  • Free up resources by dropping unused collections
Authorizations:
BearerAuth
header Parameters
authorization
required
string
Example: Bearer your_jwt_token_here

API key for authentication

Request Body schema: application/json
required
project_id
required
string

Unique identifier of the project

session_id
required
string

Session identifier for the unit collection to drop

Responses

Request samples

Content type
application/json
{
  • "project_id": "507f1f77bcf86cd799439011",
  • "session_id": "session_507f1f77bcf86cd799439011"
}

Response samples

Content type
application/json
{
  • "status": 1,
  • "message": "Collection Dropped Successfully !"
}

Update Unit By Metadata

Update unit information using metadata for a specific project. This endpoint allows you to:

  • Update unit properties based on metadata matching
  • Modify unit status, price, measurements, and currency
  • Process single unit updates with comprehensive validation
  • Maintain data integrity through metadata-based matching
Authorizations:
BearerAuth
header Parameters
project_id
required
string
Example: 507f1f77bcf86cd799439011

Project ID to identify which project the unit belongs to

Request Body schema: application/json
required
Array (= 1 items)
Any of
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

Responses

Request samples

Content type
application/json
Example
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "status": 1,
  • "message": "updated unit successfully"
}

Webhooks Leads

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.

lead_created

  • Event triggered when a new lead is created, such as when a user joins a session. PropVR sends an HTTP POST request containing the full lead document to your targetUrl.
Authorizations:
BearerAuth
Request Body schema: application/json
_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

email
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

Responses

Request samples

Content type
application/json
{
  • "_id": "string",
  • "session_id": "string",
  • "organization_id": "string",
  • "name": "string",
  • "phone_number": "string",
  • "email": "[email protected]",
  • "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"
}

Response samples

Content type
application/json
{
  • "_id": "507f1f77bcf86cd799439022",
  • "session_id": "session_abc",
  • "organization_id": "org_xyz",
  • "name": "John Doe",
  • "phone_number": "+1234567890",
  • "email": "[email protected]",
  • "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"
}

lead_updated

  • Event triggered when a lead is updated. PropVR sends an HTTP POST request containing the updated lead document to your targetUrl.
Authorizations:
BearerAuth
Request Body schema: application/json
_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

email
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

Responses

Request samples

Content type
application/json
{
  • "_id": "string",
  • "session_id": "string",
  • "organization_id": "string",
  • "name": "string",
  • "phone_number": "string",
  • "email": "[email protected]",
  • "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"
}

Response samples

Content type
application/json
{
  • "_id": "507f1f77bcf86cd799439022",
  • "session_id": "session_abc",
  • "organization_id": "org_xyz",
  • "name": "John Doe",
  • "phone_number": "+1234567890",
  • "email": "[email protected]",
  • "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"
}

lead_deleted

  • Event triggered when a lead is deleted. PropVR sends an HTTP POST request containing the updated lead document to your targetUrl.
Authorizations:
BearerAuth
Request Body schema: application/json
_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

email
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

Responses

Request samples

Content type
application/json
{
  • "_id": "string",
  • "session_id": "string",
  • "organization_id": "string",
  • "name": "string",
  • "phone_number": "string",
  • "email": "[email protected]",
  • "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"
}

Response samples

Content type
application/json
{
  • "_id": "507f1f77bcf86cd799439022",
  • "session_id": "session_abc",
  • "organization_id": "org_xyz",
  • "name": "John Doe",
  • "phone_number": "+1234567890",
  • "email": "[email protected]",
  • "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"
}

Webhooks Sessions

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.

session_created

  • Event fired on session creation. PropVR sends an HTTP POST containing the complete session document to your targetUrl.
Authorizations:
BearerAuth
Request Body schema: application/json
_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

Responses

Request samples

Content type
application/json
{
  • "_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
}

Response samples

Content type
application/json
{
  • "_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
}

session_updated

  • Event fired on session update. PropVR sends an HTTP POST containing the complete session document to your targetUrl.
Authorizations:
BearerAuth
Request Body schema: application/json
_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

Responses

Request samples

Content type
application/json
{
  • "_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
}

Response samples

Content type
application/json
{
  • "_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,
  • "pixel_streaming_link": "https://stream.example.com/session",
  • "is_reserved": false
}

session_deleted

  • Event fired on session deletion. PropVR sends an HTTP POST containing the complete session document to your targetUrl.
Authorizations:
BearerAuth
Request Body schema: application/json
_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

Responses

Request samples

Content type
application/json
{
  • "_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
}

Response samples

Content type
application/json
{
  • "_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
}

Webhooks Units

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.

unit_created

  • Triggered when a unit is created within any project. PropVR sends a POST request with the complete unit payload to your configured targetUrl.

Rules: During webhook subscription, specify rules.allowed_projects as an array of project IDs. Only unit events from those projects will trigger the webhook.

Authorizations:
BearerAuth
Request Body schema: application/json
_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)

Responses

Request samples

Content type
application/json
{
  • "_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"
}

Response samples

Content type
application/json
{
  • "_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"
}

unit_updated

  • Triggered when a unit is updated within any project. PropVR sends a POST request with the complete unit payload to your configured targetUrl.

Rules: During webhook subscription, specify rules.allowed_projects as an array of project IDs. Only unit events from those projects will trigger the webhook.

Authorizations:
BearerAuth
Request Body schema: application/json
_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)

Responses

Request samples

Content type
application/json
{
  • "_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"
}

Response samples

Content type
application/json
{
  • "_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"
}

unit_deleted

  • Triggered when a unit is deletede within any project. PropVR sends a POST request with the complete unit payload to your configured targetUrl.

Rules: During webhook subscription, specify rules.allowed_projects as an array of project IDs. Only unit events from those projects will trigger the webhook.

Authorizations:
BearerAuth
Request Body schema: application/json
_id
string

Unit document ID that was deleted

result
string

Deletion result message

Responses

Request samples

Content type
application/json
{
  • "_id": "string",
  • "result": "unit deleted"
}

Response samples

Content type
application/json
{
  • "_id": "507f1f77bcf86cd799439011",
  • "result": "unit deleted"
}

iFrame Integration Guide

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

  1. English: https://view.propvr.tech/en/<project-link>
  2. Arabic: 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=aed

iFrame 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

  • Always replace <project-link> with the Weblite URL provided to you
  • Ensure parent container height is properly defined
  • Keep allowfullscreen enabled for immersive experience
  • Use loading="lazy" for better performance

Appendix 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