Estate Model - Complete Field Reference
This page provides complete documentation of the Estate model, which represents a property listing from various sources like Vitec.
Note: For detailed information about shared classes like
Address,Image,Showing, etc., see the Shared Classes documentation.Note: For estate-specific classes like
BrokerWithRole,Plot,EstateSize,EstatePrice, andPartOwnership, see the Estate Classes documentation.
Estate Class
The main class representing a real estate property listing. This model is designed to accommodate data from multiple source systems while maintaining a consistent structure.
Core Identification
| Property | Type | Description | Example |
|---|---|---|---|
Heading |
string? |
Marketing headline | "Lekker 3-roms leilighet i sentrum" |
Id |
string |
Unique estate identifier (Vitec: estateId) | "3221523" |
AssignmentNum |
string? |
Assignment number / Oppdragsnummer (Vitec: assignmentNum) | "110250256" |
DepartmentId |
int? |
Department ID (Vitec: departmentId) | 3005093 |
ChangedDate |
DateTime? |
When this estate data was last changed | 2025-10-28T14:39:00Z |
Brokers
| Property | Type | Description |
|---|---|---|
BrokersIdWithRoles |
List<BrokerWithRole>? |
List of brokers with their roles (Vitec: brokersIdWithRoles) |
The BrokerWithRole class contains broker/employee information with role assignments.
Classification & Type
| Property | Type | Description | Example Values |
|---|---|---|---|
EstateBaseType |
int? |
Base type of property (Vitec: estateBaseType) | 0=NotSet, 1=Detached, 2=Leisure, 3=Business, 4=Project, 5=Plot, 6=Unknown |
AssignmentTypeGroup |
int? |
Assignment type group (Vitec: assignmentTypeGroup) | 0=NotSet, 1=Sale, 2=Rent, 3=LettingService, 4=ProjectSale, etc. |
Ownership |
int? |
Type of ownership (Vitec: ownership) | 0=Owned, 1=Cooperative, 2=Stock, 3=Bond, 4=Condominium |
Note: These values are stored as integer enums from the source system (e.g., Vitec). Enum mapping tables are needed to convert these to human-readable strings. See Vitec Enum Mappings.
Status
| Property | Type | Description | Example Values |
|---|---|---|---|
Status |
int |
Current status of the listing (Vitec: status) | 0=Request, 1=Preparation, 2=ForSale, 3=Sold, 4=Reserved, 5=Archived, 6=Expired, 7=Terminated |
SoldDate |
DateTime? |
Date when the property was sold | 2025-11-15 |
ExpireDate |
DateTime? |
Listing expiry date | 2026-04-20 |
Location
| Property | Type | Description |
|---|---|---|
Address |
Address? |
Address information (street, city, postal code, etc.) |
GeoCoordinates |
GeoCoordinates? |
Geographic coordinates (latitude, longitude) |
Matrikkel |
List<Matrikkel>? |
Cadastral information - Norwegian property registry data |
A property can have multiple cadastral registrations, which is why Matrikkel is a list.
See: - Address documentation - GeoCoordinates documentation - Matrikkel documentation
Property Details
Basic property characteristics directly on the Estate object:
| Property | Type | Description |
|---|---|---|
NoOfRooms |
int? |
Total number of rooms (Vitec: noOfRooms) |
NoOfBedRooms |
int? |
Number of bedrooms (Vitec: noOfBedRooms) |
NoOfBathRooms |
int? |
Number of bathrooms (Vitec: noOfBathRooms) |
Floor |
int? |
Which floor the unit is on (Vitec: floor) |
ConstructionYear |
int? |
Year property was built (Vitec: constructionYear) |
Plot |
Plot? |
Plot/land information |
EstateSize |
EstateSize? |
Area measurements (primary room area, gross area, usable area, etc.) |
The Plot and EstateSize classes provide detailed information about land and area measurements.
Energy Rating
| Property | Type | Description |
|---|---|---|
EnergyRating |
EnergyRating? |
Energy rating information (letter, color code) |
See EnergyRating documentation.
Pricing
| Property | Type | Description |
|---|---|---|
EstatePrice |
EstatePrice? |
Comprehensive pricing information |
The EstatePrice class contains:
- Asking price (priceSuggestion)
- Sold price
- Collective debt (fellesgjeld)
- Common costs/rent information
- Transaction costs
- Total price calculations
- And many other price-related fields
Ownership Details
| Property | Type | Description |
|---|---|---|
PartOwnership |
PartOwnership? |
Part ownership details (Borettslag/housing cooperative information) |
The PartOwnership class contains extensive cooperative/condominium information including:
- Organization details
- Part/share numbers
- Board approval requirements
- Deposit amounts
- Collective debt information
- And other cooperative-specific fields
Facilities & Features
| Property | Type | Description |
|---|---|---|
EstateFacilities |
List<string>? |
Estate facilities as list of names (Vitec: estateFacilities[].Name) |
Facilities |
List<int>? |
Facilities as enum values (Vitec: facilities[]) |
Facilities are stored in two ways:
- EstateFacilities: Human-readable facility names
- Facilities: Integer enum values that can be mapped to feature dictionaries
Showings
| Property | Type | Description |
|---|---|---|
Showings |
List<Showing>? |
Scheduled showings (Vitec: showings) |
ShowingNote |
string? |
General note for all showings (Vitec: showingNote) |
Media & Links
| Property | Type | Description |
|---|---|---|
Links |
List<PropertyLink>? |
External links (Vitec: links) |
Images |
ImageCollection? |
Marketing images for the property |
Documents |
DocumentCollection? |
Estate documents (brochures, floor plans, etc.) |
Important: Images and Documents are fetched from separate API endpoints but are populated into these lists when creating the Estate object.
See: - ExternalPlatformUrls documentation - PropertyLink documentation - Image documentation - Document documentation
Description Sections
| Property | Type | Description |
|---|---|---|
DescriptionSections |
List<DescriptionSection>? |
Structured description sections with titles, content, and ordering |
Description sections are used to organize property descriptions into structured, titled sections (e.g., "Location", "Interior", "Outdoor Areas"). This replaces the older approach of using a simple dictionary of text fields.
See DescriptionSection documentation.
Project Reference
For properties that are part of a new construction/housing project:
| Property | Type | Description | Example |
|---|---|---|---|
ProjectId |
string? |
Reference to housing project (Vitec: projectId) | "PROJ-2024-001" |
Usage:
// For a new build apartment
estate.ProjectId = "PROJ-2024-001";
// Look up full project details
var project = GetProjectById(estate.ProjectId);
See Project documentation for more information.
System Metadata
| Property | Type | Description |
|---|---|---|
Origin |
string? |
Source system this data came from |
CustomData |
Dictionary<string, object>? |
System-specific metadata that doesn't fit the standard model |
The Origin field indicates which system provided the data (e.g., "Vitec"). The CustomData dictionary stores any system-specific fields that don't have a direct mapping to the standard model.
Complete Usage Example
var estate = new Estate
{
// Core Identification
Heading = "Lekker 3-roms leilighet i sentrum",
EstateId = "3221523",
AssignmentNum = "110250256",
DepartmentId = 3005093,
ChangedDate = DateTime.Parse("2025-10-28T14:39:00Z"),
// Brokers
BrokersIdWithRoles = new List<BrokerWithRole>
{
new BrokerWithRole
{
EmployeeId = "3006722",
BrokerRole = 1 // Primary broker
}
},
// Classification
EstateBaseType = 1, // Detached/Residential
AssignmentTypeGroup = 1, // Sale
Ownership = 1, // Cooperative
// Status
Status = 2, // ForSale
ExpireDate = DateTime.Parse("2026-04-20"),
// Location
Address = new Address
{
Street = "Storgata 10",
PublicApartmentNumber = "H0301",
LocalAreaName = "Gimle",
ZipCode = "0155",
City = "Oslo",
Municipality = "Oslo",
County = "Oslo",
Country = "Norway",
CountryCode = "NO"
},
GeoCoordinates = new GeoCoordinates
{
Latitude = 59.9139m,
Longitude = 10.7522m
},
Matrikkel = new List<Matrikkel>
{
new Matrikkel
{
Knr = 301, // Municipality number
Gnr = 45, // Farm number
Bnr = 123, // Property number
Snr = 7, // Section number
OwnPart = "1/1",
CoOwnershipType = 1
}
},
// Property Details
NoOfRooms = 3,
NoOfBedRooms = 2,
NoOfBathRooms = 1,
Floor = 3,
ConstructionYear = 1985,
Plot = new Plot
{
Owned = true,
Size = 0, // No plot for apartment
Description = null
},
EstateSize = new EstateSize
{
PrimaryRoomArea = 70.0m,
GrossArea = 95.5m,
UsableArea = 88.0m
},
// Energy Rating
EnergyRating = new EnergyRating
{
EnergyLetter = 3, // C
EnergyColorCode = 2, // Yellow
Description = "Energy rating C"
},
// Pricing
EstatePrice = new EstatePrice
{
PriceSuggestion = 4500000,
CollectiveDebt = 250000,
Rent = new RentInfo
{
RentPrMonth = 3500
},
PurchaseCostsAmount = 25000,
TotalPrice = 4525000
},
// Part Ownership (for cooperative apartments)
PartOwnership = new PartOwnership
{
PartName = "Borettslaget Storgata",
PartOrgNumber = "987654321",
PartAbout = "Veletablert borettslag fra 1985...",
Deposit = 50000,
ShareJointDebtYear = 250000,
BoardApproval = "Styregodkjenning kreves"
},
// Facilities
EstateFacilities = new List<string>
{
"Balkong",
"Heis",
"Peis"
},
Facilities = new List<int> { 1, 5, 12 }, // Vitec facility enum values
// Showings
ShowingNote = "Velkommen til visning. Møt opp ved oppgang A.",
Showings = new List<Showing>
{
new Showing
{
ShowingId = "v001",
Start = DateTime.Parse("2025-11-05 14:00"),
End = DateTime.Parse("2025-11-05 15:00")
}
},
// Media & Links
ExternalPlatformUrls = new ExternalPlatformUrls
{
PrimaryUrl = "https://www.proaktiv.no/property/3221523",
ProspectusUrl = "https://www.proaktiv.no/property/3221523/prospectus",
PlatformUrls = new Dictionary<string, string>
{
["Finn.no"] = "https://www.finn.no/...",
["Hemnet"] = "https://www.hemnet.se/..."
}
},
Links = new List<PropertyLink>
{
new PropertyLink
{
Id = "link001",
Text = "Virtual Tour",
Url = "https://example.com/tour/3221523",
Type = 1, // Video/tour type
IsPublic = true
}
},
// Description Sections
DescriptionSections = new List<DescriptionSection>
{
new DescriptionSection
{
GroupName = "BELIGGENHET",
Title = "Beliggenhet",
Content = "Leiligheten ligger sentralt i Oslo...",
Order = 1
},
new DescriptionSection
{
GroupName = "BESKRIVELSE",
Title = "Interiør",
Content = "Moderne kjøkken med hvitevarer...",
HtmlContent = "<p>Moderne kjøkken med <strong>hvitevarer</strong>...</p>",
Order = 2
}
},
// Project Reference (for new builds)
ProjectId = null, // Not part of a project
// System Metadata
Origin = "Vitec",
CustomData = new Dictionary<string, object>
{
["systemId"] = "VIT-12345",
["finnCode"] = "12345678",
["lastImageChangeDate"] = DateTime.Parse("2025-10-25")
}
};
// Add images (fetched from separate endpoint)
estate.Images.Add(new Image
{
Id = "4821283",
OriginalUrl = "https://cdn.example.com/facade.jpg",
Filename = "facade-main.jpg",
FileExtension = "jpg",
Caption = "Fasade",
AltText = "Moderne bygård med glassbalkong",
Category = "Facade",
Order = 1,
Width = 1920,
Height = 1080,
LastModified = DateTime.Parse("2025-10-25")
});
estate.Images.Add(new Image
{
Id = "4821284",
OriginalUrl = "https://cdn.example.com/livingroom.jpg",
Filename = "stue.jpg",
FileExtension = "jpg",
Caption = "Stue",
AltText = "Lys stue med parkett og store vinduer",
Category = "Interior",
Order = 2,
Width = 1920,
Height = 1080,
LastModified = DateTime.Parse("2025-10-25")
});
// Add documents (fetched from separate endpoint)
estate.Documents.Add(new PropertyDocument
{
Id = "doc001",
Title = "Plantegning 3. etasje",
Url = "https://cdn.example.com/floorplan.pdf",
FileName = "plantegning-3etg",
FileExtension = "pdf",
Type = 1, // Floor plan type
IsPublic = true,
Order = 1,
LastModified = DateTime.Parse("2025-10-20")
});
Data Population Flow
When fetching estate data from Vitec (or other systems), the typical flow is:
- Fetch base estate:
GET /{installationId}/Estates/{estateId} - Fetch images:
GET /{installationId}/Estates/{estateId}/Images - Fetch documents:
GET /{installationId}/Estates/{estateId}/Documents - Fetch links:
GET /{installationId}/Estates/{estateId}/Links - Fetch showings:
GET /{installationId}/Estates/{estateId}/Showings - Combine all data into a single
Estateobject
The Estate object is designed to hold all this data together once fetched, even though it comes from multiple API endpoints.
Related Classes
Classes Referenced by Estate
The following classes are referenced as properties in the Estate class and need to be defined:
Estate-specific classes (defined in estate model):
BrokerWithRole- Broker with role assignmentPlot- Plot/land informationEstateSize- Area measurementsEstatePrice- Pricing informationPartOwnership- Cooperative/condominium ownership details
Shared classes (reusable across models):
- Address
- GeoCoordinates
- Matrikkel
- EnergyRating
- Showing
- ExternalPlatformUrls
- PropertyLink
- Image
- PropertyDocument
- DescriptionSection
Download
Main Estate Class:
- Download Estate.cs - Complete C# source code
Estate-Specific Classes:
- Download BrokerWithRole.cs - Broker with role assignment
- Download EstatePrice.cs - Pricing information
- Download EstateSize.cs - Area measurements
- Download PartOwnership.cs - Cooperative/condominium ownership details
- Download Plot.cs - Plot/land information
Related Pages
- Overview - High-level overview of the Estate model
- Comparison - Compare with legacy model
- Shared Classes - Reusable classes documentation
- Vitec Integration - How Estate maps to Vitec API
- Vitec Enum Mappings - Enum value mappings