Schema câmpurilor
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"]
curl https://crm.rentix.md/api/v1/reference/schema/base \
-H "Authorization: ApiKey YOUR_API_KEY"
$ch = curl_init('https://crm.rentix.md/api/v1/reference/schema/base');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$schema = json_decode($response, true);
{
"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âmp | Descriere |
|---|---|
announcementType | Tipuri de anunțuri (rent, sale) |
propertyType | Categorii de proprietăți (residential, commercial, parking) |
propertySecondaryType | Hartă imbricată: announcementType → propertyType → subtipuri |
announcementCurrency | Valute suportate |
announcementStatus | Toate statusurile anunțurilor |
formFields | Toate cheile câmpurilor formularului |
constraints | Limite 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"]
}
curl "https://crm.rentix.md/api/v1/reference/schema?announcementType=rent&propertyType=residential&propertySecondaryType=apartment" \
-H "Authorization: ApiKey YOUR_API_KEY"
$url = 'https://crm.rentix.md/api/v1/reference/schema?' . http_build_query([
'announcementType' => 'rent',
'propertyType' => 'residential',
'propertySecondaryType' => 'apartment'
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$schema = json_decode($response, true);
Parametri
| Parametru | Tip | Descriere |
|---|---|---|
announcementType | enum | rent sau sale |
propertyType | enum | residential, commercial sau parking |
propertySecondaryType | enum | Subtip (trebuie să fie valid pentru combinația dată) |
{
"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
}
}
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:
| Tip | Proprietăți | Descriere |
|---|---|---|
enum | required, options | O singură valoare dintr-o listă |
enum-array | required, options | Mai multe valori dintr-o listă |
number | required, constraints (min, max, step) | Valoare numerică în limite |
string | required, constraints (minLength, maxLength) | Text cu limite de lungime |
date | required, format | Dată în formatul specificat |
coordinates | required, constraints (lat, lng cu min/max) | Coordonate geografice |
number-array | required, 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âmp | Tip | Descriere |
|---|---|---|
propertyQuantitySize | enum | Tip cameră (apartment-studio, custom-value) |
propertyQuantitySizeValue | number | Număr de camere (când custom-value este selectat) |
propertyVisualState | enum | Stare renovare (euro-renovation, design-renovation, ...) |
propertyHousingMarket | enum | Tip piață (secondary, new-build) |
propertyBuildingMaterial | enum | Material construcție (brick, monolithic, panel, ...) |
propertyLayout | enum | Planificare/serie (102, brezhnevka, cheska, ...) |
propertyParkingSpace | enum | Tip parcare (underground, open, garage, covered) |
propertyFloorNumber | number | Număr etaj |
propertyFloorsTotal | number | Total etaje în clădire |
propertyArea | number | Suprafață totală în m² |
propertyLandArea | number | Suprafață teren în m² (case și terenuri) |
propertyCeilingHeight | number | Înălțime tavan în metri |
propertyAttributes | enum-array | Facilități și reguli (animale, WiFi, balcon, ...) |
propertyCoordinates | coordinates | Locație pe hartă (latitudine, longitudine) |
propertyAddress | string | Adresă, 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) |
propertyAvailabilityDate | date | Disponibil de la data (YYYY-MM-DD) |
Câmpuri anunț
Prezente întotdeauna (niciodată null), dar unele se aplică doar anunțurilor de tip rent.
| Câmp | Tip | Descriere |
|---|---|---|
announcementStatus | enum | Status anunț (draft, active, hidden, ...) |
announcementValue | number | Preț |
announcementCurrency | enum | Valută preț (EUR, USD, MDL) |
announcementDescription | string | Descriere anunț |
announcementBargain | enum | Negociabil (yes, no) |
announcementPayPeriod | enum | Perioadă plată, tip rent (monthly, daily, hourly) |
announcementMinRentPeriod | number | Perioadă minimă închiriere în ore (720 = 1 lună), tip rent |
announcementPrepayment | enum | Avans, tip rent |
announcementPrepaymentValue | number | Sumă avans, tip rent (când custom-amount) |
announcementRentDeposit | enum | Garanție, tip rent |
announcementRentDepositValue | number | Sumă garanție, tip rent (când custom-amount) |
fileIds | number-array | ID-uri fișiere media atașate anunțului |
Tipuri de proprietăți
Rezidențiale (residential)
| Valoare | Descriere |
|---|---|
apartment | Apartament |
house | Casă |
room | Cameră |
residential-land | Teren (doar vânzare) |
other | Altele |
Comerciale (commercial)
| Valoare | Descriere |
|---|---|
office | Birou |
trade | Spațiu comercial |
warehouse | Depozit |
free-purpose | Destinație liberă |
production | Producție |
business | Afacere |
commercial-land | Teren comercial |
legal-address | Adresă juridică |
other | Altele |
Parcări (parking)
| Valoare | Descriere |
|---|---|
underground-parking | Parcare subterană |
open-parking | Parcare deschisă |
garage | Garaj |
covered-parking | Parcare acoperită |
other | Altele |