Listings

Smart Create

Create listings from text descriptions and photos using AI analysis

Smart Create lets you create a listing from a text description and photos. AI analyzes the input, extracts property details (type, area, price, amenities), and creates a structured listing automatically.

Why Use Smart Create

Instead of manually mapping every field from your CRM to Rentix format, send the raw description and photos — the system will do the rest.

ApproachWhat You SendWhat You Get
Standard upsertAll fields manually mappedListing with your data
Smart createText + photosListing with AI-extracted data

Create a Listing from Description

Send a text description and at least one photo. The API creates a background job and returns immediately.

const response = await fetch('https://crm.rentix.md/api/v1/listings/smart', {
  method: 'POST',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    description: 'Сдаётся уютная 2-комнатная квартира, 65 м², этаж 3/9. Евроремонт, тёплые полы, автономное отопление. Цена 500 евро/мес.',
    files: [
      { url: 'https://example.com/photo1.jpg', externalFileId: 'apt-001-photo-1' },
      { url: 'https://example.com/photo2.jpg', externalFileId: 'apt-001-photo-2' },
      { url: 'https://example.com/photo3.jpg', externalFileId: 'apt-001-photo-3' }
    ],
    externalId: 'apt-001',
    targetStatus: 'active'
  })
});

const result = await response.json();
console.log(`Job created: ${result.jobId}, status: ${result.status}`);
Response
{
  "jobId": 789,
  "status": "pending",
  "externalId": "apt-001"
}

The request returns immediately with a jobId. The listing is created asynchronously — track the job status to know when it's done.


Request Parameters

Required

FieldTypeDescription
descriptionstringProperty description (40–2000 characters)
filesarray1–20 photos (see file formats)

Optional

FieldTypeDescription
externalIdstringYour CRM ID (up to 255 characters)
targetStatusenumdraft or active (default: draft)
userobject{ userId } or { externalUserId } — assign an agent
formOverridesobjectOverride AI-extracted fields (see below)
applyAnalysisbooleanApply AI photo analysis (default: true)
sanitizeAttributesbooleanSilently strip invalid attributes (default: false)

Override AI Results

If AI misidentifies certain fields, use formOverrides to correct them. Only the fields you specify are overridden — everything else comes from AI analysis.

{
  "description": "Сдаётся квартира...",
  "files": [{ "url": "https://example.com/photo.jpg" }],
  "formOverrides": {
    "announcementType": "rent",
    "propertyType": "residential",
    "propertySecondaryType": "apartment",
    "announcementValue": 500,
    "announcementCurrency": "EUR"
  }
}
formOverrides accepts the same fields as the standard upsert, except announcementDescription, announcementStatus, and files — these are managed by smart create itself.

Track Job Status

Smart create is asynchronous. After receiving the jobId, poll for completion:

Node.js
const response = await fetch(
  `https://crm.rentix.md/api/v1/job/status?id=${result.jobId}`,
  { headers: { 'Authorization': 'ApiKey YOUR_API_KEY' } }
);
const job = await response.json();

if (job.status === 'completed') {
  console.log('Listing created:', job.resultData.announcementId);
}
Completed Job
{
  "id": 789,
  "type": "announcement_smart_create",
  "status": "completed",
  "resultData": {
    "announcementId": 42,
    "finalStatus": "active"
  }
}

For full job tracking details, see Async Jobs.


Bulk Smart Create

You can include smart_create operations in bulk requests:

{
  "operations": [
    {
      "op": "smart_create",
      "description": "Сдаётся квартира...",
      "files": [{ "url": "https://example.com/photo.jpg" }],
      "externalId": "apt-001",
      "targetStatus": "active"
    },
    {
      "op": "smart_create",
      "description": "Продаётся дом...",
      "files": [{ "url": "https://example.com/house.jpg" }],
      "externalId": "house-001"
    }
  ]
}

Common Errors

ErrorCauseSolution
description too shortDescription is less than 40 charactersProvide a more detailed description
files are requiredNo photos providedAdd at least 1 photo
Too many filesMore than 20 photosReduce to 20 or fewer
Unknown field in formOverridesInvalid field name in overridesCheck allowed fields

Next Steps

Copyright © 2026