Utilizatori

Creare și actualizare

Crearea agenților și sincronizarea profilurilor prin API

Creează agenți noi sau sincronizează profiluri existente din CRM — nume, telefon, descriere, rețele sociale și setări de contact. Endpoint-ul folosește upsert: dacă externalId este nou — agentul este creat, dacă există — actualizat.

Creează un agent

Trimite externalId, name și phone pentru a crea un agent nou:

const response = await fetch('https://crm.rentix.md/api/v1/users', {
  method: 'PUT',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    externalId: 'agent-001',
    name: 'Ion Popescu',
    phone: '+37322123456'
  })
});

const result = await response.json();
console.log('Agent creat #' + result.id);
Răspuns
{
  "id": 1,
  "externalId": "agent-001",
  "created": true
}
La crearea unui agent prin API, toate canalele de contact (telefon, WhatsApp, Viber, Telegram) sunt activate implicit. Numărul de telefon este normalizat automat în format internațional.

Actualizează profilul agentului

Identifică agentul după externalId (din CRM-ul tău) sau id (din Rentix).

const response = await fetch('https://crm.rentix.md/api/v1/users', {
  method: 'PUT',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    externalId: 'agent-001',
    name: 'Ion Popescu',
    description: 'Agent imobiliar experimentat. Lucrez cu proprietăți rezidențiale și comerciale.',
    instagram: 'https://instagram.com/ion.popescu',
    settings: {
      contact_phone: true,
      contact_whatsapp: true,
      contact_telegram: true
    }
  })
});

const result = await response.json();
console.log(`Actualizat agentul #${result.id}`);
Răspuns
{
  "id": 1,
  "externalId": "agent-001",
  "updated": true
}

Parametri cerere

Identificare

Indică unul din parametri:

CâmpTipDescriere
idnumberID intern Rentix
externalIdstringID-ul tău din CRM (până la 255 caractere)
Transmite idsauexternalId, nu ambele simultan.

Profil

CâmpTipDescriere
namestringNumele agentului (3–255 caractere)
phonestringNumăr de telefon în format internațional (obligatoriu pentru agenți noi)
descriptionstring/objectDescrierea profilului
avatarobject/nullAvatarul agentului (vezi mai jos)

Format câmp avatar:

FormatExempluDescriere
După URL{ "url": "https://..." }Auto-import după URL
După internal ID{ "id": 123 }Fișier deja încărcat
GoleștenullȘterge avatarul

Rețele sociale

CâmpFormat
instagramhttps://instagram.com/username
youtubehttps://youtube.com/...
tiktokhttps://tiktok.com/@username

Setări contacte

Determină ce metode de contact sunt afișate pe anunțurile agentului.

CâmpDescriere
contact_phoneAfișează telefonul
contact_whatsappAfișează butonul WhatsApp
contact_viberAfișează butonul Viber
contact_telegramAfișează butonul Telegram
{
  "settings": {
    "contact_phone": true,
    "contact_whatsapp": true,
    "contact_viber": false,
    "contact_telegram": true
  }
}

Descriere multilingvă

Indică descrierea în mai multe limbi — sistemul va afișa cea potrivită în funcție de limba utilizatorului.

{
  "externalId": "agent-001",
  "description": {
    "ru": "Опытный агент по недвижимости. Работаю с жилой и коммерческой недвижимостью.",
    "en": "Experienced real estate agent. I work with residential and commercial properties.",
    "ro": "Agent imobiliar experimentat. Lucrez cu proprietăți rezidențiale și comerciale."
  }
}
Dacă transmiți un string în loc de obiect, acesta va fi folosit pentru toate limbile.

Operații bulk

Procesează mai mulți agenți într-o singură cerere. Fiecare operație trebuie să conțină câmpul op:

OperațieDescriere
upsertCreează sau actualizează un agent
linkLeagă external ID la un agent existent
unlinkDezleagă external ID
const response = await fetch('https://crm.rentix.md/api/v1/users/bulk', {
  method: 'POST',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    operations: [
      {
        op: 'upsert',
        externalId: 'agent-001',
        name: 'Ion Popescu',
        settings: { contact_whatsapp: true }
      },
      {
        op: 'upsert',
        externalId: 'agent-002',
        name: 'Maria Ionescu',
        settings: { contact_telegram: true }
      }
    ]
  })
});

const result = await response.json();
console.log(`Actualizați: ${result.summary.succeeded} din ${result.summary.total}`);
Răspuns
{
  "results": [
    { "op": "upsert", "externalId": "agent-001", "id": 1, "success": true },
    { "op": "upsert", "externalId": "agent-002", "id": 2, "success": true }
  ],
  "summary": {
    "total": 2,
    "succeeded": 2,
    "failed": 0
  }
}

O eroare într-o operație nu oprește celelalte. Verifică success pentru fiecare rezultat:

Răspuns cu eroare
{
  "results": [
    { "op": "upsert", "externalId": "agent-001", "id": 1, "success": true },
    {
      "op": "upsert",
      "externalId": "agent-002",
      "id": null,
      "success": false,
      "error": {
        "statusCode": 400,
        "body": {
          "error": "Invalid phone number format",
          "error_code": "VALIDATION_ERROR"
        }
      }
    }
  ],
  "summary": { "total": 2, "succeeded": 1, "failed": 1 }
}
{
  "operations": [
    { "op": "link", "id": 5, "externalId": "agent-005" },
    { "op": "unlink", "externalId": "agent-old" }
  ]
}

Încarcă avatarul agentului

Cea mai simplă metodă — transmite URL-ul imaginii direct la actualizarea profilului:

Node.js
await fetch('https://crm.rentix.md/api/v1/users', {
  method: 'PUT',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    externalId: 'agent-001',
    avatar: { url: 'https://placehold.co/200x200/jpg?text=Avatar' }
  })
});

Dacă fișierul este deja încărcat, indică ID-ul său:

{
  "externalId": "agent-001",
  "avatar": { "id": 123 }
}

Pentru a șterge avatarul, transmite null:

{
  "externalId": "agent-001",
  "avatar": null
}

Erori frecvente

EroareCauzăSoluție
User identifier requiredNu a fost transmis id sau externalIdAdaugă unul din identificatori
Cannot use both id and externalIdAu fost transmiși ambii identificatoriFolosește doar unul
User not foundAgentul nu există sau nu e în agenția taVerifică ID-ul și asigură-te că agentul e invitat
External ID already linkedAcest external ID e deja la alt agentFolosește un ID unic
Copyright © 2026