Referințe

Schema câmpurilor

Schema dinamică a câmpurilor pentru diferite tipuri de proprietăți

API-ul de schemă oferă două endpoint-uri: o schemă de bază cu toate tipurile și restricțiile posibile, și o schemă contextuală care returnează câmpurile și opțiunile exacte pentru o combinație specifică de tip de proprietate.

De ce ai nevoie de schemă

  • Validare — verifică datele înainte de trimitere pentru a evita requesturi respinse
  • Payload-uri corecte — află exact ce câmpuri și valori acceptă API-ul pentru fiecare tip de proprietate
  • Actualitate — obține restricțiile și opțiunile curente direct din API

Obține schema de bază

GET /api/v1/reference/schema/base

Returnează structura generală: tipuri de anunțuri, categorii de proprietăți, toate câmpurile formularului și restricții. Nu necesită parametri. Folosește-o pentru inițializarea formularului și înțelegerea modelului de date.

const response = await fetch('https://crm.rentix.md/api/v1/reference/schema/base', {
  headers: { 'Authorization': 'ApiKey YOUR_API_KEY' }
});
const schema = await response.json();

// Subtipuri disponibile pentru închirierea rezidențială
console.log(schema.propertySecondaryType.rent.residential);
// → ["apartment", "house", "room", "other"]
Răspuns
{
  "announcementType": ["rent", "sale"],
  "propertyType": ["residential", "commercial", "parking"],
  "propertySecondaryType": {
    "rent": {
      "residential": ["apartment", "house", "room", "other"],
      "commercial": ["office", "trade", "warehouse", "..."],
      "parking": ["underground-parking", "open-parking", "..."]
    },
    "sale": { "..." }
  },
  "announcementCurrency": ["EUR", "USD", "MDL"],
  "announcementStatus": ["draft", "active", "pending_active", "publish_failed", "expired", "hidden", "completed", "blocked"],
  "formFields": [
    "propertyType", "propertySecondaryType", "propertyQuantitySize",
    "propertyArea", "propertyFloorNumber", "propertyCoordinates",
    "announcementType", "announcementValue", "announcementCurrency",
    "announcementDescription", "fileIds"
    // ...și alte câmpuri
  ],
  "constraints": {
    "propertyArea": { "min": 1, "max": 50000, "step": 0.01 },
    "propertyFloorNumber": { "min": -10, "max": 100, "step": 1 },
    "announcementValue": { "min": 1, "max": 1000000000, "step": 1 },
    "announcementDescription": { "minLength": 40, "maxLength": 2000 },
    "propertyCoordinates": { "lat": { "min": -90, "max": 90 }, "lng": { "min": -180, "max": 180 } },
    "fileIds": { "minItems": 3, "maxItems": 20, "maxVideoFiles": 2, "maxVideoDuration": 300 }
    // ...și alte câmpuri
  }
}

Câmpurile schemei de bază

CâmpDescriere
announcementTypeTipuri de anunțuri (rent, sale)
propertyTypeCategorii de proprietăți (residential, commercial, parking)
propertySecondaryTypeHartă imbricată: announcementTypepropertyType → subtipuri
announcementCurrencyValute suportate
announcementStatusToate statusurile anunțurilor
formFieldsToate cheile câmpurilor formularului
constraintsLimite numerice pentru câmpuri

Obține schema contextuală

GET /api/v1/reference/schema

Transmite o combinație specifică de tip anunț, tip proprietate și subtip pentru a obține definiția completă a câmpurilor. Fiecare câmp include tipul, dacă este obligatoriu și opțiunile sau restricțiile disponibile. Câmpurile care nu se aplică combinației sunt returnate ca null.

const params = new URLSearchParams({
  announcementType: 'rent',
  propertyType: 'residential',
  propertySecondaryType: 'apartment'
});

const response = await fetch(
  `https://crm.rentix.md/api/v1/reference/schema?${params}`,
  { headers: { 'Authorization': 'ApiKey YOUR_API_KEY' } }
);
const schema = await response.json();

// Verifică dacă un câmp este disponibil
if (schema.fields.propertyVisualState) {
  console.log(schema.fields.propertyVisualState.options);
  // → ["classic-renovation", "euro-renovation", "design-renovation"]
}

Parametri

ParametruTipDescriere
announcementTypeenumrent sau sale
propertyTypeenumresidential, commercial sau parking
propertySecondaryTypeenumSubtip (trebuie să fie valid pentru combinația dată)
Toți trei parametrii sunt obligatorii. Împreună determină setul exact de câmpuri disponibile și opțiunile acestora.
Răspuns
{
  "context": {
    "announcementType": "rent",
    "propertyType": "residential",
    "propertySecondaryType": "apartment"
  },
  "fields": {
    "propertyQuantitySize": {
      "type": "enum",
      "required": true,
      "options": ["apartment-studio", "custom-value"]
    },
    "propertyQuantitySizeValue": {
      "type": "number",
      "required": false,
      "constraints": { "min": 1, "max": 100, "step": 1 }
    },
    "propertyArea": {
      "type": "number",
      "required": true,
      "constraints": { "min": 1, "max": 50000, "step": 0.01 }
    },
    "propertyLandArea": null,
    "propertyCoordinates": {
      "type": "coordinates",
      "required": true,
      "constraints": { "lat": { "min": -90, "max": 90 }, "lng": { "min": -180, "max": 180 } }
    },
    "propertyAvailabilityDate": {
      "type": "date",
      "required": true,
      "format": "YYYY-MM-DD"
    },
    "propertyAttributes": {
      "type": "enum-array",
      "required": false,
      "options": ["animals-allowed", "conditioner", "balcony", "wifi", "..."]
    },
    "announcementValue": {
      "type": "number",
      "required": true,
      "constraints": { "min": 1, "max": 1000000000, "step": 1 }
    },
    "announcementPayPeriod": {
      "type": "enum",
      "required": true,
      "options": ["monthly", "daily", "hourly"]
    },
    "fileIds": {
      "type": "number-array",
      "required": false,
      "constraints": { "minItems": 3, "maxItems": 20, "maxVideoFiles": 2, "maxVideoDuration": 300 }
    }
    // ...și alte câmpuri
  }
}
Valoarea null a unui câmp înseamnă că acesta nu este disponibil pentru contextul dat. Câmpurile neobligatorii pot fi omise sau trimise ca null.

Tipuri de câmpuri

Fiecare câmp din schema contextuală conține un type care determină structura sa:

TipProprietățiDescriere
enumrequired, optionsO singură valoare dintr-o listă
enum-arrayrequired, optionsMai multe valori dintr-o listă
numberrequired, constraints (min, max, step)Valoare numerică în limite
stringrequired, constraints (minLength, maxLength)Text cu limite de lungime
daterequired, formatDată în formatul specificat
coordinatesrequired, constraints (lat, lng cu min/max)Coordonate geografice
number-arrayrequired, constraints (minItems, maxItems, maxVideoFiles, maxVideoDuration)Array de ID-uri numerice (fișiere media)

Referință câmpuri

Câmpuri proprietate

Depind de propertySecondaryType selectat — pot fi null pentru unele combinații.

CâmpTipDescriere
propertyQuantitySizeenumTip cameră (apartment-studio, custom-value)
propertyQuantitySizeValuenumberNumăr de camere (când custom-value este selectat)
propertyVisualStateenumStare renovare (euro-renovation, design-renovation, ...)
propertyHousingMarketenumTip piață (secondary, new-build)
propertyBuildingMaterialenumMaterial construcție (brick, monolithic, panel, ...)
propertyLayoutenumPlanificare/serie (102, brezhnevka, cheska, ...)
propertyParkingSpaceenumTip parcare (underground, open, garage, covered)
propertyFloorNumbernumberNumăr etaj
propertyFloorsTotalnumberTotal etaje în clădire
propertyAreanumberSuprafață totală în m²
propertyLandAreanumberSuprafață teren în m² (case și terenuri)
propertyCeilingHeightnumberÎnălțime tavan în metri
propertyAttributesenum-arrayFacilități și reguli (animale, WiFi, balcon, ...)
propertyCoordinatescoordinatesLocație pe hartă (latitudine, longitudine)
propertyAddressstringAdresă, geocodificată automat în coordonate (doar CRM, max 500 caractere). Este necesar fie propertyCoordinates, fie propertyAddress. Format recomandat: Oraș, Stradă Bloc (ex. Chișinău, str. Columna 81/1)
propertyAvailabilityDatedateDisponibil de la data (YYYY-MM-DD)

Câmpuri anunț

Prezente întotdeauna (niciodată null), dar unele se aplică doar anunțurilor de tip rent.

CâmpTipDescriere
announcementStatusenumStatus anunț (draft, active, hidden, ...)
announcementValuenumberPreț
announcementCurrencyenumValută preț (EUR, USD, MDL)
announcementDescriptionstringDescriere anunț
announcementBargainenumNegociabil (yes, no)
announcementPayPeriodenumPerioadă plată, tip rent (monthly, daily, hourly)
announcementMinRentPeriodnumberPerioadă minimă închiriere în ore (720 = 1 lună), tip rent
announcementPrepaymentenumAvans, tip rent
announcementPrepaymentValuenumberSumă avans, tip rent (când custom-amount)
announcementRentDepositenumGaranție, tip rent
announcementRentDepositValuenumberSumă garanție, tip rent (când custom-amount)
fileIdsnumber-arrayID-uri fișiere media atașate anunțului

Tipuri de proprietăți

Rezidențiale (residential)

ValoareDescriere
apartmentApartament
houseCasă
roomCameră
residential-landTeren (doar vânzare)
otherAltele

Comerciale (commercial)

ValoareDescriere
officeBirou
tradeSpațiu comercial
warehouseDepozit
free-purposeDestinație liberă
productionProducție
businessAfacere
commercial-landTeren comercial
legal-addressAdresă juridică
otherAltele

Parcări (parking)

ValoareDescriere
underground-parkingParcare subterană
open-parkingParcare deschisă
garageGaraj
covered-parkingParcare acoperită
otherAltele
Copyright © 2026