Places API
Manage buildings, complexes, and property sites. Places are the top-level containers in the property hierarchy — every apartment, office, or commercial unit belongs to a place.
Quick Example
Code
Common Workflows
Set up a new apartment building
POST /api/places— Create the buildingPOST /api/places/{id}/estates— Add each apartment (Estates API)POST /api/places/{id}/estates/{id}/rooms— Define room layouts (Rooms API)POST /api/places/{id}/services— Configure building services
Add rent control to a property
GET /api/legislative-zones— Get the country reference (Rent Regulation & Rent Control API)POST /api/places— Create place withcountry_id- Rent control rules are automatically applied to leases in this place
Overview
Places represent physical buildings or property complexes and serve as containers for:
- Estates: Individual rental units within the place
- Services: Building-wide services and amenities
- Energy Diagnostics: Building-level energy assessments
- Ownership: Current and historical ownership tracking
- Legal Information: Legal regime and administrative details
- Location Data: Address, coordinates, and access information
Authentication
All endpoints require authentication with the following permissions:
- PropertiesRead: For GET operations
- PropertiesWrite: For POST and PUT operations
- PropertiesDelete: For DELETE operations
Base URL
All place endpoints are prefixed with /api/places
Core Place Operations
List Places
GET /api/places
Retrieve all places for the tenant.
Response:
Code
Create Place
POST /api/places
Create a new place (building or complex).
Request Body:
Code
Response: 201 Created
Returns the created place object with generated ID and timestamps.
Get Place
GET /api/places/{id}
Retrieve a specific place by ID.
Path Parameters:
id(UUID): The place ID
Response: 200 OK
Returns the place object.
Update Place
PUT /api/places/{id}
Update an existing place. All fields are optional in update requests.
Update behavior for optional fields:
- Field absent: the existing value is preserved (no modification)
- Field present with
null: the value is removed (set to NULL in the database) - Field present with a value: the value is updated
Path Parameters:
id(UUID): The place ID
Request Body:
Code
Response: 200 OK
Returns the updated place object.
Delete Place
DELETE /api/places/{id}
Delete a place (only possible if no estates are associated).
Path Parameters:
id(UUID): The place ID
Response: 204 No Content
Nested Resources
Estates Management
See Estates API for detailed estate operations within places.
Places can contain multiple estates accessed through:
- GET
/api/places/{id}/estates - POST
/api/places/{id}/estates - And other estate-specific endpoints
Services Management
List Place Services
GET /api/places/{id}/services
Retrieve all services associated with a place.
Path Parameters:
id(UUID): The place ID
Response: 200 OK
Code
Add Service to Place
POST /api/places/{id}/services
Add a service to a place.
Path Parameters:
id(UUID): The place ID
Request Body:
Code
If
is_chargeable = true, bothcategory_idanddefault_distribution_key_idare required.
Response: 201 Created
Returns the created service association.
Remove Service from Place
DELETE /api/places/{id}/services/{service_id}
Remove a service from a place.
Path Parameters:
id(UUID): The place IDservice_id(UUID): The service ID
Response: 204 No Content
Energy Diagnostics
See Energy Diagnosis API for energy assessments.
Energy diagnostics for places accessed through:
- GET
/api/places/{id}/energy-diagnoses
Data Types and Structures
Place Object
| Field | Type | Description |
|---|---|---|
id | UUID | Generated place ID |
name | string | Place name/title |
country | string | Country name (e.g. "France") |
street_number | string | Street number |
street_name | string | Street name |
address_complement | string | Additional address info (building, staircase, etc.) |
locality | string | Locality/neighborhood |
postal_code | string | Postal/ZIP code |
city | string | City name |
postal_box | string | Postal box |
latitude | number | GPS latitude |
longitude | number | GPS longitude |
description | string | Place description |
type_id | UUID | Reference to place type |
country_id | UUID | Reference to country/legislative zone |
digicode | string | Building access code |
number_of_floor | integer | Number of floors |
owner_id | UUID | Current owner ID |
previous_owner_id | UUID | Previous owner ID |
construction_date | datetime | Construction date |
renovation_date | datetime | Last renovation date |
place_category | PlaceCategory | Individual or Collective |
legal_regime | PlaceLegalRegime | Legal ownership structure |
created_at | datetime | Creation timestamp |
updated_at | datetime | Last update timestamp |
Required Fields for Creation
name, type_id, country_id, owner_id, country, street_name, postal_code, city, place_category, legal_regime
Enums and Categories
PlaceCategory
Individual- Single-family property or individual buildingCollective- Multi-unit building or apartment complex
PlaceLegalRegime
MonoPropriete- Single ownership (one owner for entire building)Copropriete- Co-ownership/Condominium (multiple owners in building)
Address Structure
Places use a structured address format with separate fields:
- street_number: House/building number (e.g. "24")
- street_name: Street name (required, e.g. "rue du Faubourg Saint-Antoine")
- address_complement: Building, staircase, floor details (e.g. "Bâtiment A")
- locality: Locality or neighborhood
- postal_code: Postal code (required, e.g. "75012")
- city: City (required, e.g. "Paris")
- postal_box: Postal box number
- country: Country name (required, e.g. "France")
GPS Coordinates
Optional latitude/longitude coordinates for mapping:
- latitude: Decimal degrees (-90.0 to 90.0)
- longitude: Decimal degrees (-180.0 to 180.0)
Building Access
- digicode: Entry code or access information
- number_of_floor: Total floors in building
Error Responses
Validation Errors
400 Bad Request
Code
Not Found
404 Not Found
Code
Dependency Constraint
409 Conflict
Code
Common Use Cases
Creating a New Apartment Building
- Create place with
POST /api/places - Set
place_categoryto "Collective" andlegal_regimeto "Copropriete" - Include building access information (digicode, number of floors)
- Add individual apartments as estates
- Configure building-wide services
Managing Single-Family Properties
- Create place with
place_categoryset to "Individual" - Set
legal_regimeto "MonoPropriete" - Create single estate representing the entire property
- Associate with individual owner
Ownership Transfer
- Update
previous_owner_idwith currentowner_id - Set new
owner_id - Update associated estates if needed
Business Rules
- Required Relationships: Places must have valid type, country, and owner
- Address:
country,street_name,postal_code, andcityare mandatory - Ownership Consistency: All estates in a place should reflect place ownership
- Legal Regime: Must match the actual legal structure of the property
- Deletion Constraints: Cannot delete places with associated estates or services
- Coordinate Validation: GPS coordinates must be within valid ranges
Integration Notes
- Place Types: Reference to the Types API for place categorization
- Countries: Integration with Rent Regulation & Rent Control API
- Owners: Reference to Owners API for ownership management
- Estates: Places contain multiple estates through nested routes
- Services: Building-level services affect all estates
- Energy Diagnostics: Building-level assessments complement estate-level diagnostics