Getting Started
Quick Start
Publish your first listing in a single request
Publish a listing on Rentix in a single request. Send property data, photo URLs, and active status — the system handles everything else.
What you'll need:
- API key (how to get one)
- 3+ property photos accessible by URL
Prefer Postman? Import our Postman collection to test all API endpoints with pre-configured requests and examples.
Step 1. Verify Connection
Make sure your API key works.
const response = await fetch('https://crm.rentix.md/api/v1/agency', {
headers: { 'Authorization': 'ApiKey YOUR_API_KEY' }
});
const agency = await response.json();
console.log(`Agency: ${agency.name}`);
curl https://crm.rentix.md/api/v1/agency \
-H "Authorization: ApiKey YOUR_API_KEY"
$ch = curl_init('https://crm.rentix.md/api/v1/agency');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$agency = json_decode($response, true);
echo "Agency: " . $agency['name'];
Response
{
"id": 1,
"name": "Your Agency",
"limits": {
"monthlyListings": { "used": 0, "limit": 1000 }
}
}
Step 2. Publish a Listing
Send all data in a single request: property info, photo URLs, and active status.
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({
// Your CRM ID — use it for all operations with this listing
externalId: 'apt-001',
// Type: apartment rental
announcementType: 'rent',
propertyType: 'residential',
propertySecondaryType: 'apartment',
// Price
announcementValue: 500,
announcementCurrency: 'EUR',
announcementPayPeriod: 'monthly',
// Characteristics
propertyArea: 65,
propertyFloorNumber: 3,
propertyFloorsTotal: 9,
propertyQuantitySize: 'custom-value',
propertyQuantitySizeValue: 3, // 3 rooms
propertyHousingMarket: 'new-build',
propertyVisualState: 'euro-renovation',
// Location (or propertyCoordinates: { lat, lng } — preferred)
propertyAddress: 'Chișinău, str. Columna 81/1',
// Description (optional, 40–2000 chars)
announcementDescription: 'Cozy 3-room apartment with heated floors and autonomous heating.',
// Photos — just provide URLs
files: [
{ url: 'https://placehold.co/1920x1080/jpg?text=Living+Room' },
{ url: 'https://placehold.co/1920x1080/jpg?text=Bedroom' },
{ url: 'https://placehold.co/1920x1080/jpg?text=Kitchen' }
],
// Publish immediately
announcementStatus: 'active'
})
});
const result = await response.json();
console.log(`Listing: ${result.publicUrl}`);
console.log(`Status: ${result.status}`);
curl -X PUT https://crm.rentix.md/api/v1/listings \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "apt-001",
"announcementStatus": "active",
"announcementType": "rent",
"propertyType": "residential",
"propertySecondaryType": "apartment",
"announcementValue": 500,
"announcementCurrency": "EUR",
"announcementPayPeriod": "monthly",
"propertyArea": 65,
"propertyFloorNumber": 3,
"propertyFloorsTotal": 9,
"propertyQuantitySize": "custom-value",
"propertyQuantitySizeValue": 3,
"propertyHousingMarket": "new-build",
"propertyVisualState": "euro-renovation",
"propertyAddress": "Chișinău, str. Columna 81/1",
"announcementDescription": "Cozy 3-room apartment with heated floors and autonomous heating.",
"files": [
{ "url": "https://placehold.co/1920x1080/jpg?text=Living+Room" },
{ "url": "https://placehold.co/1920x1080/jpg?text=Bedroom" },
{ "url": "https://placehold.co/1920x1080/jpg?text=Kitchen" }
]
}'
$listing = [
'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,
'propertyHousingMarket' => 'new-build',
'propertyVisualState' => 'euro-renovation',
'propertyAddress' => 'Chișinău, str. Columna 81/1',
'announcementDescription' => 'Cozy 3-room apartment with heated floors and autonomous heating.',
'files' => [
['url' => 'https://placehold.co/1920x1080/jpg?text=Living+Room'],
['url' => 'https://placehold.co/1920x1080/jpg?text=Bedroom'],
['url' => 'https://placehold.co/1920x1080/jpg?text=Kitchen']
],
'announcementStatus' => 'active'
];
$ch = curl_init('https://crm.rentix.md/api/v1/listings');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($listing));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ApiKey YOUR_API_KEY',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$result = json_decode($response, true);
echo "URL: " . $result['publicUrl'];
Response
{
"id": 42,
"externalId": "apt-001",
"status": "pending_active",
"publicUrl": "https://rentix.md/announcement/42",
"created": true,
"jobId": 789
}
You can add Learn more — External ID.
externalFileId to each photo — then you can reference files by your own IDs without storing Rentix internal IDs:{ "url": "https://...", "externalFileId": "apt-001-photo-1" }
Instead of
propertyCoordinates you can use propertyAddress — the system will geocode the address automatically. Coordinates are recommended for accuracy. propertyAddress format: City, Street Number (e.g. Chișinău, str. Columna 81/1).Done
The listing is created and queued for publication. Status pending_active means the system is:
- Downloading and optimizing photos
- Analyzing images to determine property features
- Translating the description to other languages
Shortly, the status will change to active, and the listing will appear on the website.
Processing happens automatically in queue order and may occasionally take a bit longer.
Update a Listing
Use the same externalId. Send only the changed fields:
{
"externalId": "apt-001",
"announcementValue": 550
}
To clear a field, send null:
{
"externalId": "apt-001",
"propertyFloorNumber": null
}
Manage Status
| Action | How |
|---|---|
| Hide from website | "announcementStatus": "hidden" |
| Restore to website | "announcementStatus": "active" |
| Mark as completed | "announcementStatus": "completed" |
What's Next
| Topic | Description |
|---|---|
| Reference Schema | Explore all available fields, allowed values, and form structure |
| Bulk Operations | Sync up to 100 listings per request |
| External ID | Use your CRM IDs |
| Initial Sync | Upload all listings from your CRM |
| Agent Management | Link listings to specific agents |