Salt la conținutul principal
Un anunț e un obiect JSON plat: fiecare informație e un câmp de prim nivel (price, rooms, floor), iar dotările sunt o listă de coduri (features). Aceleași câmpuri le trimiți la POST /listings/validate, POST /listings, PATCH /listings/{code} și PUT /listings/ref/{ref}. Pagina de față explică grupurile de câmpuri și dă câte un exemplu complet pe tipurile cele mai folosite. Lista completă, cu tipul și unitatea fiecărui câmp și cu tipurile de proprietate pentru care există, e în vocabular, la GET /schema.

Identitatea

string
obligatoriu
Tipul proprietății: apartment, house, room, complex, land, commercial, warehouse, garage, hospitality, special.
string
Subtipul, din vocabularul tipului (de exemplu studio, standard, penthouse la apartament; building, agricultural la teren). Obligatoriu pentru toate tipurile care au subtipuri, adică toate în afară de room și complex.
string
obligatoriu
sale (vânzare), rent (închiriere) sau short_stay (regim hotelier). Nu orice tip acceptă orice tranzacție: perechile valide sunt în types[].transactions din vocabular. Regimul hotelier se poate folosi doar când vocabularul îl marchează available: true.
Tipul și tranzacția nu se mai schimbă după creare.

Textul

string
obligatoriu
Titlul, între 10 și 90 de caractere, cu conținut real (nu „aaaaaaaaaa”).
string
obligatoriu
Descrierea, între 30 și 5.000 de caractere. Nu pune în text telefoane, emailuri sau adrese web: contactul trece prin pagina anunțului, iar moderarea respinge anunțurile cu date de contact în text.
string
Limba titlului și a descrierii, ca cod ISO 639-1 (ro, en). Dacă lipsește, Housera o deduce din text.

Locația

latitude, longitude, city și street sunt obligatorii pentru orice anunț. Opțional, trimiți county, area (cartierul), street_number și landmark (un reper apropiat). Detaliile sunt în ghidul de locație.

Prețul

integer
obligatoriu
Suma întreagă, în moneda din price_currency. Sensul urmează tranzacția: prețul total la vânzare, chiria pe lună la închiriere, prețul pe noapte în regim hotelier. E întotdeauna prețul întregii oferte, niciodată pe metru pătrat. Obligatoriu, cu excepția ansamblurilor (complex), unde prețul „de la” se calculează din tipurile de unități.
string
implicit:"EUR"
Codul ISO 4217 al monedei. Monedele acceptate sunt în currencies din vocabular (EUR, RON, USD și altele). Toate sumele anunțului (garanția, costurile suplimentare) sunt în aceeași monedă.
boolean
Prețul e negociabil.
În răspuns, price e valoarea în euro, pe care o compară căutarea, cu currency: "EUR". Suma și moneda în care ai trimis-o sunt în price_declared:
Valoarea în euro urmează cursul de referință al zilei.

Suprafețele

Toate suprafețele sunt în m², cu cel mult două zecimale. Vocabularul conține și suprafețele secundare (balcoane, terasă, curte, birouri, producție, depozitare), fiecare pe tipurile la care are sens.

Specificațiile

Câmpurile care descriu proprietatea: camere, etaj, an, stare, încălzire, certificat energetic și multe altele. Cele obligatorii depind de tip: Câteva reguli utile:
  • Codurile, nu etichetele. Trimiți "condition": "renovated", nu "Renovat". Codurile și etichetele lor (în română și engleză) sunt în vocabular.
  • Etajul ca număr e acceptat: 3 e citit ca floor_3, 0 ca ground, -1 ca semi_basement. În răspunsuri primești mereu codul.
  • Booleenii sunt true sau false.
  • Listele (heating_types, orientations, materials) sunt liste de coduri, chiar și cu un singur element.
  • Codurile retrase rămân valabile: dacă trimiți un cod vechi, e citit ca succesorul lui (vezi retired în vocabular).

Dotările

features e o listă de coduri din catalogul de dotări, de exemplu ["ac", "elevator", "intercom"]. Catalogul are câteva sute de coduri, grupate (utilități, securitate, exterior, clădire…), fiecare cu tipurile de proprietate la care se aplică. Îl găsești în features din vocabular. O dotare care nu e în catalog sau nu se aplică tipului anunțului nu blochează scrierea: e ignorată și apare în warnings[].

Contactul

Numele și emailul de contact sunt cele ale contului care deține cheia. Telefonul e cel din cont, dacă nu trimiți altul:
string
Un număr de telefon valid. Se salvează în format internațional (E.164). Obligatoriu doar dacă în cont nu e niciun telefon.

Ce nu există pentru tip și tranzacție

Fiecare câmp există doar pentru anumite combinații de tip și tranzacție: garanția (deposit_months) doar la închiriere, numărul de porți de încărcare (dock_doors_count) doar la hale, compartimentarea doar la apartamente. Un câmp trimis acolo unde nu există nu e o eroare: e ignorat, iar răspunsul ți-l semnalează în warnings[]:
Așa poți trimite din CRM aceleași câmpuri pentru toate anunțurile, iar Housera păstrează doar ce are sens. Merită totuși să-ți curăți maparea până când warnings[] e gol.

Exemple complete

Toate exemplele de mai jos trec de validare așa cum sunt.

Ansamblurile rezidențiale

Un ansamblu (complex) nu are un etaj, o suprafață sau un preț unic. În locul lor, trimiți lista tipurilor de unități în unit_types. Cel puțin un rând trebuie să fie complet: label, area_sqm, units_count și price_from.
Prețul afișat al ansamblului e cel mai mic price_from. Câmpurile de proiect (stadiul, termenul de livrare, regimul de înălțime) sunt în vocabular, la câmpurile care au complex între tipuri.

Linkuri media

Linkuri externe, http sau https, de cel mult 500 de caractere: video (un film de prezentare), tour (un tur virtual), plan (un plan).