> ## Documentation Index
> Fetch the complete documentation index at: https://api.housera.ro/llms.txt
> Use this file to discover all available pages before exploring further.

# Firma și echipa

> Cum citești datele firmei, oamenii din echipă și punctele de lucru, și ce evenimente primești când se schimbă echipa sau firma.

Prin API citești firma în care lucrează cheia: datele ei, oamenii din echipă și punctele de lucru, cu aceleași reguli ca paginile Echipa și Puncte de lucru din portal. Așa legi colegii din CRM-ul tău de cei din Housera și afli emailul pe care îl trimiți în `agent` la un anunț sau în `agent_email` la `POST /leads/{id}/assign`.

Prin API doar citești. Invitațiile, rolurile, mutarea între puncte de lucru, dezactivarea și scoaterea din echipă se fac în portal. Când se schimbă ceva, primești un eveniment (vezi [Evenimentele echipei și ale firmei](#evenimentele-echipei-si-ale-firmei)).

Toate cele trei apeluri cer dreptul `listings:read`.

## Firma

`GET /account/firm` întoarce firma în care lucrează cheia.

```json theme={null}
{
  "data": {
    "id": 47,
    "name": "Casa Bună",
    "kind": "agency",
    "status": "approved",
    "legal_name": "Casa Bună Imobiliare SRL",
    "tax_id": "12345678",
    "email": "contact@casabuna.ro",
    "phone": "+40232100200",
    "website": "https://casabuna.ro",
    "url": "https://housera.ro/agentii/casa-buna",
    "suspended_until": null,
    "closes_at": null,
    "merges_into": null
  }
}
```

| Câmp | Ce conține |
| - | - |
| `kind` | `agency` pentru o agenție, `developer` pentru un dezvoltator imobiliar. |
| `status` | Starea firmei pe Housera: `approved`, `suspended`, `pending` sau `needs_info` (în verificare), `rejected` ori `closed`. |
| `legal_name`, `tax_id` | Denumirea din registru și codul fiscal. |
| `url` | Pagina publică a firmei. `null` cât timp firma nu e aprobată. |
| `suspended_until` | Până când e suspendată firma. `null` dacă suspendarea ține până se rezolvă cauza, sau dacă firma nu e suspendată. |
| `closes_at` | Data la care Housera închide firma sau o unește cu alta, după un preaviz de 30 de zile. `null` dacă nu e nimic programat. |
| `merges_into` | Firma în care va fi unită, cu `id` și `name`, când e programată o unire. |

Un cont care nu lucrează în nicio firmă, sau care a ieșit din firma cheii, primește `404`. O firmă suspendată se citește în continuare, cu `status: suspended`.

## Echipa

`GET /account/members` întoarce oamenii din echipă, cu paginare prin cursor, în ordinea în care au intrat în firmă.

```json theme={null}
{
  "data": [
    {
      "id": 311,
      "name": "Maria Popescu",
      "email": "maria.popescu@casabuna.ro",
      "phone": "+40740123456",
      "role": "agent",
      "position": "Agent imobiliar",
      "office": { "id": 12, "name": "Tătărași" },
      "projects": [],
      "active": true,
      "has_account": true,
      "joined_at": "2026-03-02T09:10:00+00:00"
    }
  ],
  "meta": { "next_cursor": null }
}
```

| Câmp | Ce conține |
| - | - |
| `id` | Id-ul colegului în echipă. Îl găsești și în evenimentele `member.*`. |
| `name` | Numele public aprobat al colegului, același ca pe pagina firmei și în `agent.display_name` al cererilor. Fără un nume aprobat, numele din echipă. |
| `email`, `phone` | Datele de contact ale colegului. Le primești doar dacă le vezi și în portal (vezi mai jos), altfel sunt `null`. |
| `role` | `owner` (titular), `admin`, `manager` sau `agent`. `null` pentru un coleg venit dintr-un CRM, care nu are încă un cont. |
| `office` | Punctul de lucru, cu `id` și `name`. |
| `projects` | La un dezvoltator: codurile ansamblurilor pe care lucrează. Titularul și administratorii lucrează pe toate, așa că la ei lista e goală. |
| `active` | `false` pentru un coleg dezactivat: rămâne în echipă, dar nu are acces și nu primește cereri. |
| `has_account` | `false` pentru un coleg venit dintr-un CRM care nu și-a făcut încă un cont. |

Ce vede cheia depinde de rolul contului, ca pe pagina Echipa:

| Rol | Pe cine vede | Emailul și telefonul |
| - | - | - |
| titularul sau un administrator | toată echipa | ale tuturor |
| un manager | oamenii punctului său de lucru (la un dezvoltator, ai proiectelor sale) | ale lor |
| un agent | toată echipa | doar pe ale lui |

Colegii care au ieșit din firmă nu mai apar. Cât timp firma e suspendată sau contul e dezactivat, lista e goală, ca în portal.

## Punctele de lucru

`GET /account/offices` întoarce punctele de lucru ale firmei, întâi sediul, apoi celelalte după nume. Un dezvoltator nu are puncte de lucru, fiindcă echipele lui sunt pe proiecte, așa că lista e goală.

| Câmp | Ce conține |
| - | - |
| `id` | Id-ul punctului de lucru. Îl trimiți ca `office` în `GET /leads`. |
| `name` | Numele punctului de lucru. |
| `kind` | `main` pentru sediu, `branch` pentru celelalte. |
| `address` | Adresa, pe părți: `street`, `number`, `city`, `county`, `postal_code`, `country`. |
| `phone`, `email` | Datele de contact ale punctului de lucru. |
| `members` | Câți colegi lucrează acolo acum, fără cei dezactivați. |

## Evenimentele echipei și ale firmei

Când se schimbă echipa sau firma, primești un eveniment, pe webhook și în `GET /events`. Pornesc din portal și de la moderarea Housera.

| Eveniment | Când |
| - | - |
| `member.joined` | Cineva a intrat în echipă: a acceptat o invitație sau i s-a aprobat cererea de acces. |
| `member.role_changed` | Unui coleg i s-a schimbat rolul. `previous_role` e rolul de dinainte. |
| `member.office_changed` | Un coleg a fost mutat în alt punct de lucru. `previous_office` e punctul de dinainte. |
| `member.deactivated` | Un coleg a fost dezactivat: rămâne în echipă, dar nu mai are acces și nu mai primește cereri. |
| `member.reactivated` | Un coleg dezactivat a fost reactivat. |
| `member.removed` | Un coleg a ieșit din echipă. `reason` spune cum: `removed` (scos de titular sau de un administrator), `left` (a plecat singur) sau `account_deleted` (și-a șters contul). Anunțurile și cererile lui au trecut la colegul din `handed_to`, sau cererile au ajuns la „De preluat” (`inbox: true`). |
| `firm.suspended` | Housera a suspendat firma. `until` e data până la care ține suspendarea, sau `null` dacă ține până se rezolvă cauza. |
| `firm.reactivated` | Firma a fost reactivată după o suspendare. |
| `firm.closure_scheduled` | Housera a programat închiderea firmei, cu preaviz, la data din `closes_at`. Dacă închiderea se anulează, primești din nou evenimentul, cu `cancelled: true` și `closes_at: null`. |
| `firm.closed` | Firma a fost închisă. |
| `firm.merge_scheduled` | Housera a programat unirea firmei (`firm`) cu alta (`into`), la data din `closes_at`. O primesc amândouă firmele. La anulare, din nou cu `cancelled: true`. |
| `firm.merged` | Firma `firm` a fost unită cu firma `into`. O primesc amândouă. |

`member` din evenimentele `member.*` are `id`, `name`, `email`, `role` și `office`, ca în `GET /account/members`. Când colegul și-a șters contul (`reason: account_deleted`), `member` are doar `id`, fără nume și email. `handed_to` are `name` și `email`. `firm` și `into` au `id` și `name`.

Evenimentele ajung la titularul și administratorii firmei, prin cheile legate de firmă care au dreptul `listings:read`, iar la un integrator doar dacă legătura lui e pe acea firmă. Un manager sau un agent nu le primește. `firm.suspended`, `firm.closed` și `firm.merged` pleacă înainte ca firma să-și piardă echipa, iar cheia legată de firmă le citește în continuare în `GET /events`.

Webhook-urile integratorilor le primesc automat. Pe un webhook din Setări → API le bifezi, fiindcă nu decurg din alt eveniment.

> [!WARNING]
>
> Emailurile și telefoanele colegilor sunt date personale. Păstrează-le doar cât îți trebuie ca să legi colegii din CRM-ul tău de cei din Housera.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.