Property & Property Unit Listing
Overview
LandlordX uses a two-level hierarchy for property management: Properties (buildings/societies) and Property Units (individual rentable units within properties). This design enables efficient reuse of property data while maintaining unit-level granularity.
Core Concepts
Property vs Property Unit
| Entity | Description | Example |
|---|---|---|
| Property | Overall building, society, or plot | ”Sunshine Apartments” |
| Property Unit | Specific rentable unit within a property | ”Flat 101 in Sunshine Apartments” |
Property Types
| Type | Description |
|---|---|
apartment | Flat in a multi-story building |
gated_community_villa | Villa in a gated community |
independent_house | Standalone house |
commercial | Commercial/office space |
pg | Paying Guest accommodation |
Property Onboarding Flow
When a landlord lists a new property, the system intelligently checks for existing properties to avoid duplicates.
Smart Property Matching
The system searches for existing properties based on:
- Society/Building Name - Fuzzy matching on the name
- Pin Code - Exact match required
- Locality - Similarity matching
This prevents duplicate entries for the same building (e.g., multiple landlords in “Sunshine Apartments”).
Data Models
Property Entity
interface Property {
property_id: string; // UUID
// Address fields
society_building?: string; // "Sunshine Apartments", "Anand Niwas"
survey_number?: string; // Land survey number
road_name?: string; // Road/street name
locality?: string; // Area/sector/locality
landmark?: string; // Nearby landmark
pin_code: number; // Postal code
// Location (auto-fetched via pin code)
district: string;
city: string;
state: string;
country: string; // Default: "India"
// Classification
alias_name: string; // User-friendly name
property_type: PropertyType; // apartment, pg, etc.
common_amenities?: string[]; // gym, pool, security, parking
// Approval status
property_approved: boolean;
property_approved_at?: Date;
property_approved_by?: number; // OpsUser ID
}Property Unit Entity
interface PropertyUnit {
property_unit_id: string; // UUID
property_id: number; // Parent property
landlord_id: number; // Owner
managed_by_id: number; // Manager (can be same as landlord)
// Unit identification
unit_name: string; // "Flat 101", "Tower A - 801"
// Unit details
room_type?: RoomType; // 1rk, 1bhk, 2bhk, etc.
furnishing_type?: FurnishingType; // fully/semi/unfurnished
furniture_included?: string; // Description of furniture
area_sqft?: number; // Unit area
floor_number?: number; // Floor level
// Status
is_available: boolean; // Available for rent
unit_notes?: string; // Additional notes
unit_amenities?: string[]; // balcony, private_parking
}Room Types
| Type | Description |
|---|---|
1rk | 1 Room Kitchen |
1bhk | 1 Bedroom Hall Kitchen |
2bhk | 2 Bedroom Hall Kitchen |
3bhk | 3 Bedroom Hall Kitchen |
4bhk | 4 Bedroom Hall Kitchen |
5bhk | 5 Bedroom Hall Kitchen |
other | Other configurations |
Furnishing Types
| Type | Description |
|---|---|
fully_furnished | All furniture and appliances included |
semi_furnished | Basic furniture included |
unfurnished | No furniture included |
Property Listing Workflow
Step 1: Property Search & Selection
Step 2: Property & Unit Creation
API Endpoints
Property Management
| Method | Endpoint | Description |
|---|---|---|
POST | /properties | Create property (with optional units) |
GET | /properties | List all landlord’s properties |
GET | /properties/:id | Get single property |
PATCH | /properties/:id | Update property |
DELETE | /properties/:id | Soft delete property |
Property Unit Management
| Method | Endpoint | Description |
|---|---|---|
POST | /properties/:propertyId/units | Create unit for property |
GET | /properties/:propertyId/units | List units for property |
GET | /properties/:propertyId/units/:unitId | Get single unit |
PATCH | /properties/:propertyId/units/:unitId | Update unit |
DELETE | /properties/:propertyId/units/:unitId | Soft delete unit |
Example: Create Property with Unit
POST /properties
{
"alias_name": "Sunshine Apartments - A Wing",
"property_type": "apartment",
"society_building": "Sunshine Apartments",
"locality": "Koregaon Park",
"pin_code": 411001,
"district": "Pune",
"city": "Pune",
"state": "Maharashtra",
"common_amenities": ["gym", "security", "parking"],
"property_units": [
{
"unit_name": "Flat 101",
"room_type": "2bhk",
"furnishing_type": "semi_furnished",
"area_sqft": 1200,
"floor_number": 1,
"unit_amenities": ["balcony"]
}
]
}Property Lifecycle
Business Rules
- Property Reuse: Same building can be shared across multiple landlords
- Auto-Approval: Properties are automatically approved on creation
- Landlord Assignment:
landlord_idautomatically set from JWT token - Manager Default: If no manager specified,
managed_by_id=landlord_id - Soft Delete: Deletions set
is_active = false(data preserved) - Pin Code Lookup: City, district, state auto-fetched from pin code
Related Documentation
- Property Module API - Technical API details
- Lease Agreement Generation & Signing - Creating and signing agreements for units
- User Onboarding - Landlord/manager onboarding