Объявления

Создание и обновление

Как создавать, обновлять и публиковать объявления через API

Один endpoint PUT /listings для всех операций с объявлениями: создание, обновление и публикация. API автоматически определяет, создать новое объявление или обновить существующее.

Создайте объявление

Отправьте данные объекта. Если externalId новый — создаётся объявление, если существующий — обновляется.

const response = await fetch('https://crm.rentix.md/api/v1/listings', {
  method: 'PUT',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    externalId: 'apt-001',
    announcementType: 'rent',
    propertyType: 'residential',
    propertySecondaryType: 'apartment',
    announcementValue: 500,
    announcementCurrency: 'EUR',
    announcementPayPeriod: 'monthly',
    propertyArea: 65,
    propertyFloorNumber: 3,
    propertyFloorsTotal: 9,
    propertyQuantitySize: 'custom-value',
    propertyQuantitySizeValue: 3, // 3 комнаты
    propertyHousingMarket: 'new-build', // новостройка
    propertyVisualState: 'euro-renovation', // евроремонт
    propertyAddress: 'Chișinău, str. Columna 81/1', // or propertyCoordinates: { lat, lng } (preferred)
    announcementDescription: 'Уютная 3-комнатная квартира с тёплыми полами и автономным отоплением.'
  })
});

const result = await response.json();
console.log(result.created ? 'Создано' : 'Обновлено');
Ответ
{
  "id": 42,
  "externalId": "apt-001",
  "status": "draft",
  "publicUrl": "https://rentix.md/announcement/42",
  "created": true,
  "jobId": null
}

Объявление создано в статусе draft. Для публикации нужны фотографии.

Опубликуйте объявление

Для публикации требуется:

  1. Минимум 3 фотографии
  2. Статус active

Самый простой способ — передать URL фотографий прямо при создании. Рекомендуется добавлять externalFileId для отслеживания:

{
  "externalId": "apt-001",
  "announcementStatus": "active",
  "files": [
    { "url": "https://placehold.co/1920x1080/jpg?text=Гостиная", "externalFileId": "apt-001-photo-1" },
    { "url": "https://placehold.co/1920x1080/jpg?text=Спальня", "externalFileId": "apt-001-photo-2" },
    { "url": "https://placehold.co/1920x1080/jpg?text=Кухня", "externalFileId": "apt-001-photo-3" }
  ]
}

Также можно использовать уже загруженные файлы:

{
  "externalId": "apt-001",
  "announcementStatus": "active",
  "files": [
    { "id": 123 },
    { "externalFileId": "apt-001-photo-2" },
    { "externalFileId": "apt-001-photo-3" }
  ]
}
Ответ
{
  "id": 42,
  "externalId": "apt-001",
  "status": "pending_active",
  "publicUrl": "https://rentix.md/announcement/42",
  "updated": true,
  "jobId": 789
}

Статус pending_active означает, что объявление обрабатывается (оптимизация фото, перевод). Через несколько секунд станет active.

Как загружать фото — в разделе Медиафайлы.

Обновите объявление

Передайте только изменённые поля — остальные сохранятся:

{
  "externalId": "apt-001",
  "announcementValue": 600,
  "announcementDescription": "Обновлённое описание квартиры..."
}

Чтобы очистить поле, отправьте null:

{
  "externalId": "apt-001",
  "propertyFloorNumber": null
}

Скройте или закройте сделку

ДействиеКак
Скрыть с сайта"announcementStatus": "hidden"
Вернуть на сайт"announcementStatus": "active"
Отметить как завершённую"announcementStatus": "completed"

Поля ответа

ПолеТипОписание
idnumberВнутренний ID Rentix
externalIdstringВаш ID из CRM
statusstringТекущий статус объявления
publicUrlstringURL объявления на rentix.md
createdbooleantrue если объявление создано
updatedbooleantrue если объявление обновлено
jobIdnumberID задачи (при публикации)

Параметры запроса

Идентификация

ПолеТипОписание
idnumberВнутренний ID Rentix
externalIdstringВаш ID из CRM (до 255 символов)
Передайте либоid, либоexternalId — не оба одновременно.

Тип объявления (обязательные)

ПолеТипЗначения
announcementTypeenumrent, sale
propertyTypeenumresidential, commercial, parking
propertySecondaryTypeenumЗависит от propertyType (см. обзор)

Цена

ПолеТипОписание
announcementValuenumberЦена (от 1 до 1 000 000 000)
announcementCurrencyenumEUR, USD, MDL
announcementPayPeriodenummonthly, daily, hourly, yearly (только для аренды)

Характеристики

ПолеТипОписание
propertyAreanumberПлощадь, м²
propertyLandAreanumberПлощадь участка, м²
propertyFloorNumbernumberЭтаж (от -10 до 100)
propertyFloorsTotalnumberВсего этажей (от 1 до 100)
propertyCeilingHeightnumberВысота потолков, м
propertyQuantitySizeenumapartment-studio, custom-value
propertyQuantitySizeValuenumberКоличество комнат (если custom-value)

Местоположение

ПолеТипОписание
propertyCoordinatesobject{ lat, lng } — точные GPS-координаты (рекомендуется)
propertyAddressstringАдрес — автоматически геокодируется в координаты (макс. 500 символов)
Передайте либоpropertyCoordinates, либоpropertyAddress — не оба одновременно. Координаты рекомендуются для точности. Формат propertyAddress: Город, Улица Номер (напр. Chișinău, str. Columna 81/1).

Состояние

ПолеТипЗначения
propertyVisualStateenumclassic-renovation, euro-renovation, design-renovation, requires-renovation, white-finish, rough-finish
propertyHousingMarketenumsecondary, new-build
propertyBuildingMaterialenumbrick, mixed, cotilet, monolithic, concrete, block, wood, panel, aerated-concrete
propertyLayoutenum102, 135, 143, brezhnevka, varnitskaia, gostinka, custom, small-family, moldovan-series, ground-level, rubashka, stalinka, khrushchyovka, cheska
propertyAttributesarrayУдобства и правила (см. схему)

Условия аренды

ПолеТипОписание
announcementMinRentPeriodnumberМинимальный срок, часы
announcementPrepaymentenumno-prepayment, first-and-last-month, months-3, months-6, custom-amount
announcementPrepaymentValuenumberСумма (при custom-amount)
announcementRentDepositenummonths-1, months-3, custom-amount
announcementRentDepositValuenumberСумма (при custom-amount)
announcementBargainenumyes, no

Описание и медиа

ПолеТипОписание
announcementDescriptionstring/objectОписание (40–2000 символов) или объект с переводами
filesarrayМассив файлов (см. ниже)
applyAnalysisbooleanАвтоопределение атрибутов по фото и описанию (по умолчанию true)

Формат элементов files:

ФорматПримерОписание
URL + external ID{ "url": "...", "externalFileId": "..." }Рекомендуется — автоимпорт с отслеживанием
Только URL{ "url": "https://..." }Автоимпорт без отслеживания
По internal ID{ "id": 123 }Уже загруженный файл
По external ID{ "externalFileId": "photo-1" }Файл с вашим ID
Рекомендуется всегда указывать externalFileId при передаче URL — это позволит отслеживать файлы и избежать дублирования при повторных запросах.

Пользователь и статус

ПолеТипОписание
userobject{ userId } или { externalUserId } — назначить агента
announcementStatusenumdraft, active, hidden, completed
Полный список полей для конкретного типа недвижимости — в справочнике схемы.

Валидация

Проверьте данные без сохранения — полезно для валидации формы в CRM.

POST /api/v1/listings/validate

curl -X POST https://crm.rentix.md/api/v1/listings/validate \
  -H "Authorization: ApiKey YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "announcementType": "rent",
    "propertyType": "residential",
    "propertySecondaryType": "apartment",
    "announcementValue": 500,
    "announcementDescription": "Короткое"
  }'
Ответ с ошибками
{
  "valid": false,
  "errors": [
    {
      "field": "announcementDescription",
      "code": "STRING_TOO_SHORT",
      "message": "Минимальная длина: 40 символов"
    }
  ],
  "warnings": []
}
Успешная валидация
{
  "valid": true,
  "errors": [],
  "warnings": []
}

Многоязычное описание

Описание может быть строкой или объектом с переводами:

{
  "announcementDescription": {
    "ru": "Уютная 3-комнатная квартира с тёплыми полами...",
    "en": "Cozy 3-room apartment with heated floors...",
    "ro": "Apartament confortabil cu 3 camere cu podele calde..."
  }
}

Если передать строку — система автоматически переведёт на остальные языки.

Поддерживаемые локали: ru, en, ro


Частые ошибки

ОшибкаПричинаРешение
Cannot provide both id and externalIdПередали оба идентификатораИспользуйте только один
announcementDescription too shortОписание меньше 40 символовДобавьте больше деталей
Minimum 3 photos requiredНедостаточно фото для публикацииЗагрузите минимум 3 фото
Invalid propertySecondaryTypeПодтип не соответствует типуПроверьте допустимые комбинации

Следующие шаги

Copyright © 2026