Схема полей
API схемы имеет два endpoint-а: базовая схема — все возможные типы и ограничения, и контекстная схема — точный набор полей и опций под конкретную комбинацию типа недвижимости.
Зачем нужна схема
- Валидация — проверяйте данные перед отправкой, чтобы запросы не отклонялись
- Корректные запросы — точно знайте, какие поля и значения допустимы для каждого типа недвижимости
- Актуальность — получайте текущие ограничения и опции напрямую из API
Получите базовую схему
GET /api/v1/reference/schema/base
Возвращает общую структуру: типы объявлений, категории недвижимости, все поля формы и ограничения. Параметры не требуются. Используйте для инициализации формы и понимания структуры данных.
const response = await fetch('https://crm.rentix.md/api/v1/reference/schema/base', {
headers: { 'Authorization': 'ApiKey YOUR_API_KEY' }
});
const schema = await response.json();
// Доступные подтипы для аренды жилья
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"
// ...и другие поля
],
"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 }
// ...и другие поля
}
}
Поля базовой схемы
| Поле | Описание |
|---|---|
announcementType | Типы объявлений (rent, sale) |
propertyType | Категории недвижимости (residential, commercial, parking) |
propertySecondaryType | Вложенная карта: announcementType → propertyType → подтипы |
announcementCurrency | Поддерживаемые валюты |
announcementStatus | Все статусы объявлений |
formFields | Все ключи полей формы |
constraints | Числовые ограничения полей |
Получите контекстную схему
GET /api/v1/reference/schema
Передайте комбинацию типа объявления, категории и подтипа недвижимости, чтобы получить полное описание полей формы. Каждое поле включает тип, обязательность, доступные опции или ограничения. Неприменимые поля возвращаются как 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();
// Проверьте доступность поля
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);
Параметры
| Параметр | Тип | Описание |
|---|---|---|
announcementType | enum | rent или sale |
propertyType | enum | residential, commercial или parking |
propertySecondaryType | enum | Подтип (должен быть валидным для данной комбинации) |
{
"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 }
}
// ...и другие поля
}
}
null у поля означает, что оно недоступно для данного контекста. Необязательные поля можно не передавать или отправить как null.Типы полей
Каждое поле в контекстной схеме содержит type, определяющий его структуру:
| Тип | Свойства | Описание |
|---|---|---|
enum | required, options | Одно значение из списка |
enum-array | required, options | Несколько значений из списка |
number | required, constraints (min, max, step) | Число в заданных пределах |
string | required, constraints (minLength, maxLength) | Текст с ограничением длины |
date | required, format | Дата в указанном формате |
coordinates | required, constraints (lat, lng с min/max) | Географические координаты |
number-array | required, constraints (minItems, maxItems, maxVideoFiles, maxVideoDuration) | Массив числовых ID (медиафайлы) |
Справочник полей
Поля недвижимости
Зависят от выбранного propertySecondaryType — для некоторых комбинаций могут быть null.
| Поле | Тип | Описание |
|---|---|---|
propertyQuantitySize | enum | Тип комнат (apartment-studio, custom-value) |
propertyQuantitySizeValue | number | Количество комнат (при выбранном custom-value) |
propertyVisualState | enum | Состояние ремонта (euro-renovation, design-renovation, ...) |
propertyHousingMarket | enum | Тип рынка (secondary, new-build) |
propertyBuildingMaterial | enum | Материал строительства (brick, monolithic, panel, ...) |
propertyLayout | enum | Планировка/серия (102, brezhnevka, cheska, ...) |
propertyParkingSpace | enum | Тип парковки (underground, open, garage, covered) |
propertyFloorNumber | number | Номер этажа |
propertyFloorsTotal | number | Всего этажей в здании |
propertyArea | number | Общая площадь в м² |
propertyLandArea | number | Площадь участка в м² (дома и участки) |
propertyCeilingHeight | number | Высота потолков в метрах |
propertyAttributes | enum-array | Удобства и правила (животные, WiFi, балкон, ...) |
propertyCoordinates | coordinates | Расположение на карте (широта, долгота) |
propertyAddress | string | Адрес, автоматически геокодируется в координаты (только CRM, макс. 500 символов). Необходимо указать либо propertyCoordinates, либо propertyAddress. Рекомендуемый формат: Город, Улица Дом (напр. Chișinău, str. Columna 81/1) |
propertyAvailabilityDate | date | Дата доступности (YYYY-MM-DD) |
Поля объявления
Присутствуют всегда (никогда не null), но некоторые применимы только к объявлениям типа rent.
| Поле | Тип | Описание |
|---|---|---|
announcementStatus | enum | Статус объявления (draft, active, hidden, ...) |
announcementValue | number | Цена |
announcementCurrency | enum | Валюта цены (EUR, USD, MDL) |
announcementDescription | string | Описание объявления |
announcementBargain | enum | Торг (yes, no) |
announcementPayPeriod | enum | Период оплаты, тип rent (monthly, daily, hourly) |
announcementMinRentPeriod | number | Минимальный срок аренды в часах (720 = 1 месяц), тип rent |
announcementPrepayment | enum | Предоплата, тип rent |
announcementPrepaymentValue | number | Сумма предоплаты, тип rent (при custom-amount) |
announcementRentDeposit | enum | Залог, тип rent |
announcementRentDepositValue | number | Сумма залога, тип rent (при custom-amount) |
fileIds | number-array | ID медиафайлов объявления |
Типы недвижимости
Жильё (residential)
| Значение | Описание |
|---|---|
apartment | Квартира |
house | Дом |
room | Комната |
residential-land | Участок (только продажа) |
other | Другое |
Коммерция (commercial)
| Значение | Описание |
|---|---|
office | Офис |
trade | Торговое помещение |
warehouse | Склад |
free-purpose | Свободного назначения |
production | Производство |
business | Готовый бизнес |
commercial-land | Коммерческий участок |
legal-address | Юридический адрес |
other | Другое |
Паркинг (parking)
| Значение | Описание |
|---|---|
underground-parking | Подземный паркинг |
open-parking | Открытая парковка |
garage | Гараж |
covered-parking | Крытая парковка |
other | Другое |