Anunțuri
Obținere anunțuri
Căutare anunțuri după ID, external ID și cu filtre
Obține informații despre anunțuri pentru a afișa statusul în CRM sau pentru sincronizarea modificărilor.
Găsește anunțul după ID
Folosește ID-ul intern Rentix.
const response = await fetch('https://crm.rentix.md/api/v1/listings/42', {
headers: { 'Authorization': 'ApiKey YOUR_API_KEY' }
});
const listing = await response.json();
console.log(`Status: ${listing.formData.announcementStatus}`);
console.log(`URL: ${listing.publicUrl}`);
curl https://crm.rentix.md/api/v1/listings/42 \
-H "Authorization: ApiKey YOUR_API_KEY"
$ch = curl_init('https://crm.rentix.md/api/v1/listings/42');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$listing = json_decode($response, true);
Răspuns
{
"id": 42,
"externalId": "apt-001",
"publicUrl": "https://rentix.md/announcement/42",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T12:00:00.000Z",
"lastSyncedAt": "2024-01-15T12:00:00.000Z",
"formData": {
"id": 42,
"announcementStatus": "active",
"announcementType": "rent",
"propertyType": "residential",
"propertySecondaryType": "apartment",
"propertyCoordinates": { "lat": 47.0245, "lng": 28.8323 },
"announcementValue": 500,
"announcementCurrency": "EUR",
"announcementDescription": "Un apartament spațios...",
"...": "alte câmpuri ale anunțului"
},
"user": {
"id": 1,
"externalId": "agent-001",
"name": "John Doe",
"phone": "+37312345678",
"role": "admin"
},
"files": [
{
"id": 123,
"externalId": "apt-001-photo-1",
"contentType": "image/jpeg",
"size": "102400", // in bytes
"optimization": "success"
}
]
}
Câmpuri răspuns
| Câmp | Tip | Descriere |
|---|---|---|
id | number | ID-ul intern al anunțului în Rentix |
externalId | string | null | ID-ul extern din CRM-ul tău (null dacă nu este legat) |
publicUrl | string | Link-ul public al anunțului pe Rentix |
createdAt | string | Data ISO a creării |
updatedAt | string | Data ISO a ultimei actualizări |
lastSyncedAt | string | null | Data ISO a ultimei sincronizări CRM (null dacă nu a fost sincronizat) |
formData | object | Toate câmpurile anunțului (status, tip, preț, coordonate, descriere etc.) |
formData.id | number | Același cu id de la nivel superior |
formData.announcementStatus | string | Statusul anunțului (draft, active, hidden, pending_active) |
user | object | null | Agentul atribuit (null dacă nu este atribuit niciun agent) |
user.id | number | ID-ul intern al utilizatorului |
user.externalId | string | null | ID-ul extern al utilizatorului din CRM |
user.name | string | Numele utilizatorului |
user.phone | string | Telefonul utilizatorului |
user.role | string | null | Rolul în agenție (admin, editor, viewer) |
files | array | Fotografii atașate |
files[].id | number | ID-ul intern al fișierului |
files[].externalId | string | null | ID-ul extern al fișierului din CRM |
files[].contentType | string | Tip MIME (ex. image/jpeg) |
files[].size | string | Dimensiunea fișierului în bytes |
files[].optimization | string | Statusul optimizării (pending, processing, success, failed) |
Obiectul
formData conține aceleași câmpuri folosite la crearea sau actualizarea unui anunț. Vezi Schema câmpurilor pentru detalii complete.Găsește anunțul după external ID
Folosește ID-ul din CRM-ul tău. Formatul răspunsului este identic.
const response = await fetch('https://crm.rentix.md/api/v1/listings/external/apt-001', {
headers: { 'Authorization': 'ApiKey YOUR_API_KEY' }
});
const listing = await response.json();
curl https://crm.rentix.md/api/v1/listings/external/apt-001 \
-H "Authorization: ApiKey YOUR_API_KEY"
$ch = curl_init('https://crm.rentix.md/api/v1/listings/external/apt-001');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$listing = json_decode($response, true);
Obține lista anunțurilor
Returnează anunțuri cu paginare și filtrare. Fiecare element din răspuns are același format ca un anunț individual.
const response = await fetch('https://crm.rentix.md/api/v1/listings?status=active&limit=20', {
headers: { 'Authorization': 'ApiKey YOUR_API_KEY' }
});
const { items, meta } = await response.json();
console.log(`Total: ${meta.totalItems}, pagina ${meta.currentPage} din ${meta.totalPages}`);
curl "https://crm.rentix.md/api/v1/listings?status=active&limit=20" \
-H "Authorization: ApiKey YOUR_API_KEY"
$ch = curl_init('https://crm.rentix.md/api/v1/listings?status=active&limit=20');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
echo "Total: {$data['meta']['totalItems']}, pagina {$data['meta']['currentPage']}";
Parametri de filtrare
| Parametru | Tip | Descriere |
|---|---|---|
status | enum | Filtru după status (draft, active, hidden, pending_active) |
userId | number | Filtru după agent (ID intern) |
externalUserId | string | Filtru după agent (external ID) |
syncedAfter | string | Dată ISO — doar actualizate după această dată |
page | number | Pagină (1–1000) |
limit | number | Elemente pe pagină (1–100, implicit 20) |
Nu poți folosi
userId și externalUserId simultan.Răspuns
{
"items": [
{
"id": 42,
"externalId": "apt-001",
"publicUrl": "https://rentix.md/announcement/42",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T12:00:00.000Z",
"lastSyncedAt": "2024-01-15T12:00:00.000Z",
"formData": { "id": 42, "announcementStatus": "active", "..." : "..." },
"user": { "id": 1, "externalId": "agent-001", "name": "John Doe", "phone": "+373...", "role": "admin" },
"files": [{ "id": 123, "externalId": "photo-1", "contentType": "image/jpeg", "size": "102400", // in bytes "optimization": "success" }]
}
],
"meta": {
"currentPage": 1,
"itemCount": 20,
"itemsPerPage": 20,
"totalItems": 150,
"totalPages": 8
}
}
Sincronizare incrementală
Pentru sincronizare regulată, interogă doar anunțurile modificate folosind syncedAfter.
// Salvează timpul ultimei sincronizări
let lastSync = loadLastSyncTime() || new Date(0).toISOString();
async function syncChanges() {
const response = await fetch(
`https://crm.rentix.md/api/v1/listings?syncedAfter=${lastSync}`,
{ headers: { 'Authorization': 'ApiKey YOUR_API_KEY' } }
);
const { items, meta } = await response.json();
for (const listing of items) {
await updateInCrm(listing);
}
// Dacă sunt mai multe pagini, le încărcăm
if (meta.currentPage < meta.totalPages) {
// Încarcă paginile următoare...
}
// Salvăm timpul pentru următoarea sincronizare
lastSync = new Date().toISOString();
saveLastSyncTime(lastSync);
console.log(`Sincronizate: ${items.length} anunțuri`);
}
curl "https://crm.rentix.md/api/v1/listings?syncedAfter=2024-01-15T11:00:00Z" \
-H "Authorization: ApiKey YOUR_API_KEY"
$lastSync = getLastSyncTime() ?: '1970-01-01T00:00:00Z';
$ch = curl_init("https://crm.rentix.md/api/v1/listings?syncedAfter={$lastSync}");
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ApiKey YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
foreach ($data['items'] as $listing) {
updateInCrm($listing);
}
saveLastSyncTime(date('c'));
echo "Sincronizate: " . count($data['items']) . " anunțuri";
Rezultatele sunt sortate după
updatedAt — cele mai noi modificări primele.Erori frecvente
| Eroare | Cauză | Soluție |
|---|---|---|
Listing not found | Anunțul nu există sau aparține altei agenții | Verifică ID-ul și asigură-te că folosești cheia API corectă |
Cannot use both userId and externalUserId | Ai transmis ambii parametri | Folosește doar unul |