Skip to main content
A listing is a flat JSON object: each piece of information is a top-level field (price, rooms, floor), and the amenities are a list of codes (features). You send the same fields to POST /listings/validate, POST /listings, PATCH /listings/{code}, and PUT /listings/ref/{ref}. This page explains the groups of fields and provides a complete example for the most used types. The complete list, with the type and unit of each field and with the property types for which they exist, is in vocabular, at GET /schema.

Identity

string
required
Property type: apartment, house, room, complex, land, commercial, warehouse, garage, hospitality, special.
string
Subtype, from the vocabulary of the type (e.g., studio, standard, penthouse for apartment; building, agricultural for land). Mandatory for all types that have subtypes, meaning all except room and complex.
string
required
sale (sale), rent (rental) or short_stay (hotel regime). Not every type accepts every transaction: valid pairs are in types[].transactions of the vocabulary. The hotel regime can only be used when the vocabulary marks it available: true.
The type and the transaction do not change after creation.

Text

string
required
Title, between 10 and 90 characters, with real content (not “aaaaaaaaaa”).
string
required
Description, between 30 and 5,000 characters. Do not include phone numbers, emails, or website addresses in the text: contact goes through the listing page, and moderation rejects listings with contact details in the text.
string
Language of the title and description, as ISO 639-1 code (ro, en). If missing, Housera deduces it from the text.

Location

latitude, longitude, city, and street are mandatory for any listing. Optionally, send county, area (neighborhood), street_number, and landmark (a nearby landmark). Details are in location guide.

Price

integer
required
Whole amount, in the currency from price_currency. The meaning follows the transaction: total price for sale, monthly rent for rental, price per night in hotel regime. It is always the price of the entire offer, never per square meter. Mandatory, except for developments (complex), where the “from” price is calculated from the types of units.
string
default:"EUR"
Currency’s ISO 4217 code. Accepted currencies are in currencies of the vocabulary (EUR, RON, USD, and others). All amounts of the listing (deposit, additional costs) are in the same currency.
boolean
The price is negotiable.
In the response, price is the value in euros, which the search compares, with currency: "EUR". The amount and the currency you sent are in price_declared:
The value in euros follows the daily reference rate.

Areas

All areas are in m², with at most two decimals. The vocabulary also contains secondary areas (balconies, terrace, yard, offices, production, storage), each for the types to which it makes sense.

Specifications

Fields that describe the property: rooms, floor, year, condition, heating, energy certificate, and many others. The mandatory ones depend on the type: A few useful rules:
  • Codes, not labels. Send "condition": "renovated", not "Renovat". Codes and their labels (in Romanian and English) are in the vocabulary.
  • The floor as a number is accepted: 3 is read as floor_3, 0 as ground, -1 as semi_basement. In responses, you always receive the code.
  • Booleans are true or false.
  • Lists (heating_types, orientations, materials) are lists of codes, even with a single element.
  • Withdrawn codes remain valid: if you send an old code, it is read as its successor (see retired in the vocabulary).

Amenities

features is a list of codes from the amenities catalog, for example ["ac", "elevator", "intercom"]. The catalog has several hundred codes, grouped (utilities, security, exterior, building…), each with the property types to which it applies. You can find it in features of the vocabulary. An amenity that is not in the catalog or does not apply to the type of the listing does not block the submission: it is ignored and appears in warnings[].

Contact

The name and email of contact are those of the account that holds the key. The phone is the one from the account, unless you send another one:
string
A valid phone number. It is saved in international format (E.164). Mandatory only if there is no phone in the account.

What does not exist for type and transaction

Each field exists only for certain combinations of type and transaction: the deposit (deposit_months) only for rentals, the number of loading gates (dock_doors_count) only for warehouses, layout only for apartments. A field submitted where it does not exist is not an error: it is ignored, and the response signals it to you in warnings[]:
Thus, you can send the same fields from the CRM for all listings, and Housera keeps only what makes sense. It is still worth cleaning your mapping until warnings[] is empty.

Complete examples

All the examples below pass validation as they are.

Residential developments

A development (complex) does not have a single floor, area, or price. Instead, you send the list of unit types in unit_types. At least one row must be complete: label, area_sqm, units_count, and price_from.
The displayed price of the development is the lowest price_from. Project fields (status, delivery term, height regime) are in the vocabulary, in fields that have complex among types.
External links, http or https, of up to 500 characters: video (a presentation video), tour (a virtual tour), plan (a plan).