> ## 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.

# Citește agenda peste anunțuri

> Vizionările, cererile și zilele de vizită liberă de pe toate anunțurile din agenda contului, ca în pagina „Agenda” din portal: anunțurile tale, cele ale căror vizionări ți-au fost date, ale echipei pentru un manager și proiectele unui consultant (doar clienții lui). Implicit, de azi pe 14 zile, cel mult 93 de zile într-o cerere, câte o pagină. O vizionare a cărei oră a trecut are starea `completed` imediat. Datele clienților și nota de la „Cum a fost?” vin doar pentru o cheie cu dreptul `leads:read`.



## OpenAPI

````yaml ro/openapi.json GET /account/viewings
openapi: 3.1.2
info:
  title: Housera API
  version: 1.0.0
  description: >-
    Publică și gestionează anunțuri imobiliare pe Housera din CRM-ul sau din
    aplicația ta, cu aceleași reguli ca formularul din portalul Housera.
servers:
  - url: https://staging.housera.ro/api/v1
    description: 'Sandbox (staging): date de test, aceleași reguli ca producția.'
  - url: https://housera.ro/api/v1
    description: 'Producție: anunțurile reale de pe housera.ro.'
security:
  - bearer: []
tags:
  - name: Anunțurile tale
  - name: Poze
  - name: Evenimente
  - name: Vocabular
  - name: Conectează cu Housera
  - name: Cererile clienților
  - name: Firma și echipa
  - name: Mandatele de comercializare
  - name: Vizionări
  - name: Proiecte
  - name: Parteneriate
  - name: Cheia API
  - name: Statistici
paths:
  /account/viewings:
    get:
      tags:
        - Vizionări
      summary: Citește agenda peste anunțuri
      description: >-
        Vizionările, cererile și zilele de vizită liberă de pe toate anunțurile
        din agenda contului, ca în pagina „Agenda” din portal: anunțurile tale,
        cele ale căror vizionări ți-au fost date, ale echipei pentru un manager
        și proiectele unui consultant (doar clienții lui). Implicit, de azi pe
        14 zile, cel mult 93 de zile într-o cerere, câte o pagină. O vizionare a
        cărei oră a trecut are starea `completed` imediat. Datele clienților și
        nota de la „Cum a fost?” vin doar pentru o cheie cu dreptul
        `leads:read`.
      operationId: v1.viewings.agenda
      parameters:
        - name: from
          in: query
          schema:
            type:
              - string
              - 'null'
            maxLength: 40
          description: >-
            Începutul intervalului: o zi (`2026-11-12`, pe ceasul României) sau
            un moment cu fus orar. Implicit, azi.
        - name: to
          in: query
          schema:
            type:
              - string
              - 'null'
            maxLength: 40
          description: >-
            Sfârșitul intervalului: o zi, care intră întreagă, sau un moment cu
            fus orar. Implicit, 14 zile după `from`. Cel mult 93 de zile după
            `from`.
        - name: listing
          in: query
          schema:
            type:
              - string
              - 'null'
            maxLength: 40
          description: >-
            Doar orele unui anunț, după codul lui. Un cod din afara agendei dă o
            listă goală.
        - name: agent
          in: query
          schema:
            type:
              - string
              - 'null'
            format: email
            maxLength: 254
          description: >-
            Doar ce face un coleg, după emailul lui. Un manager, un
            administrator sau titularul pot numi orice coleg; ceilalți doar pe
            ei înșiși. Un email din afara agendei dă o listă goală.
        - name: status
          in: query
          schema:
            type:
              - string
              - 'null'
            maxLength: 60
          description: >-
            Stările vizionărilor, separate prin virgulă: `pending`, `booked`,
            `completed`, `available`. Implicit `pending,booked,completed`.
            `available` cere `listing`.
        - name: kind
          in: query
          schema:
            type:
              - string
              - 'null'
            enum:
              - viewing
              - open_house
              - null
          description: '`viewing` sau `open_house`. Fără el, amândouă.'
        - name: per_page
          in: query
          schema:
            type:
              - integer
              - 'null'
            minimum: 1
            maximum: 100
          description: Câte rezultate pe pagină (implicit 50, maximum 100).
        - name: cursor
          in: query
          schema:
            type:
              - string
              - 'null'
          description: >-
            Cursorul paginii următoare, din `meta.next_cursor`, trimis exact cum
            l-ai primit. Altă valoare primește 422 (`pagination_cursor`).
        - name: locale
          in: query
          required: false
          schema:
            type: string
            enum:
              - ro
              - en
            default: ro
          example: ro
          description: >-
            Limba răspunsului, `ro` sau `en`. Schimbă mesajele erorilor
            (`title`, `detail`), etichetele și, când anunțul are o traducere
            aprobată în limba cerută, titlul și descrierea lui. Codurile sunt
            aceleași în orice limbă. Are întâietate față de `Accept-Language` și
            de limba contului.
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ViewingSlotApiResource'
                    description: Rezultatul cererii.
                  links:
                    type: object
                    properties:
                      first:
                        type:
                          - string
                          - 'null'
                        description: Adresa primei pagini.
                      last:
                        type:
                          - string
                          - 'null'
                        description: Adresa ultimei pagini (null la paginarea cu cursor).
                      prev:
                        type:
                          - string
                          - 'null'
                        description: Adresa paginii anterioare, sau null.
                      next:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Pagina următoare: adresa ei, sau cursorul de trimis
                          mai departe. Null când nu mai e nimic.
                    required:
                      - first
                      - last
                      - prev
                      - next
                    description: Legăturile de paginare.
                  meta:
                    type: object
                    properties:
                      path:
                        type:
                          - string
                          - 'null'
                        description: Adresa de bază a listei.
                      per_page:
                        type: integer
                        minimum: 0
                        description: Numărul de rezultate pe pagină.
                      next_cursor:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Cursorul paginii următoare; null când lista s-a
                          terminat.
                      prev_cursor:
                        type:
                          - string
                          - 'null'
                        description: Cursorul paginii anterioare; null pe prima pagină.
                      pending_requests:
                        type: integer
                        minimum: 0
                        description: >-
                          Câte cereri de vizionare așteaptă răspunsul tău. O
                          cerere la care ai propus altă oră așteaptă răspunsul
                          clientului și nu se numără.
                      next_at:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Următoarea vizionare sau cerere din agendă, oricare ar
                          fi intervalul cerut. Null dacă nu urmează nimic.
                    required:
                      - path
                      - per_page
                      - next_cursor
                      - prev_cursor
                      - pending_requests
                      - next_at
                    description: >-
                      Date despre răspuns, în afara rezultatului, de exemplu
                      paginarea unei liste.
                required:
                  - data
                  - links
                  - meta
          description: Cererea a reușit.
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Cheia lipsește, e revocată sau a expirat (`unauthenticated`).
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Cheia nu are dreptul cerut (`missing_ability`) sau accesul e refuzat
            (`forbidden`).
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
          description: >-
            Datele nu trec regulile: câte o intrare pe câmp în `errors[]`, cu un
            `code` stabil.
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Prea multe cereri. Reîncearcă după numărul de secunde din
            `Retry-After`.
components:
  schemas:
    ViewingSlotApiResource:
      type: object
      properties:
        id:
          anyOf:
            - type: integer
            - []
          description: >-
            Id-ul evenimentului (ULID, crescător). Îl trimiți ca `after` ca să
            continui de unde ai rămas.
        kind:
          anyOf:
            - type: string
              enum:
                - viewing
                - open_house
            - []
          description: Tipul.
        starts_at:
          anyOf:
            - type: string
            - []
          description: Ora de început.
        ends_at:
          anyOf:
            - type: string
            - []
          description: Ora de final.
        status:
          anyOf:
            - type: string
              const: completed
            - []
          description: >-
            `available`, `pending`, `booked` sau `completed` (vizionarea
            rezervată a cărei oră a trecut).
        request_expires_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: >-
            Momentul până la care răspunzi unei cereri. După el, cererea expiră
            și ora se eliberează. Null dacă ora nu e cerută.
        visitor:
          anyOf:
            - anyOf:
                - type: object
                  properties:
                    name:
                      type:
                        - string
                        - 'null'
                      description: Numele.
                    email:
                      type: 'null'
                      description: Emailul clientului, dacă îl are.
                    phone:
                      type:
                        - string
                        - 'null'
                      description: Telefonul.
                    account:
                      type: boolean
                      description: >-
                        `true`: clientul are cont pe Housera. `false`: l-ai
                        adăugat de mână și nu are email.
                  required:
                    - name
                    - email
                    - phone
                    - account
                - type: 'null'
                - type: object
                  properties:
                    name:
                      type: string
                      description: Numele.
                    email:
                      type: string
                      description: Emailul clientului, dacă îl are.
                    phone:
                      type:
                        - string
                        - 'null'
                      description: Telefonul.
                    account:
                      type: boolean
                      description: >-
                        `true`: clientul are cont pe Housera. `false`: l-ai
                        adăugat de mână și nu are email.
                  required:
                    - name
                    - email
                    - phone
                    - account
                - type: object
                  properties:
                    name:
                      type: string
                      description: Numele.
                    email:
                      type: string
                      description: Emailul clientului, dacă îl are.
                    phone:
                      type:
                        - string
                        - 'null'
                      description: Telefonul.
                  required:
                    - name
                    - email
                    - phone
            - []
          description: >-
            Clientul: `name`, `email`, `phone` și `account`. Doar pentru o cheie
            cu dreptul `leads:read`, altfel null. Numele și telefonul unui
            client adăugat de mână se șterg la 90 de zile după vizionare.
        source:
          anyOf:
            - type: string
              enum:
                - schedule
                - manual
            - []
          description: >-
            `schedule`: ora a fost generată de programul săptămânal. `manual`: a
            fost pusă de mână.
        duration_min:
          anyOf:
            - type: integer
            - []
          description: 'Durata unei vizionări, în minute: 15, 30, 45, 60 sau 90.'
        held:
          anyOf:
            - type: boolean
            - []
          description: >-
            Ora e ținută pentru scurt timp pentru cineva care intră în cont ca
            s-o rezerve. Cât e ținută, nimeni altcineva n-o poate rezerva.
        bookable:
          anyOf:
            - type: string
            - []
          description: >-
            La o oră liberă: dacă un client o poate rezerva acum (preavizul, cel
            care face vizionările nu e ocupat la alt anunț, ora nu e ținută).
            Null la celelalte ore.
        booked_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: Când a fost rezervată sau cerută ora.
        proposed_starts_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: >-
            Ora propusă clientului în locul celei rezervate, cât timp așteaptă
            răspunsul lui. Altfel null.
        attendance_confirmed_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: Când a răspuns clientul „Da, vin” la mementou.
        reminded_day_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: Când i s-a trimis clientului mementoul din ziua dinainte.
        reminded_soon_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: Când i s-a trimis clientului mementoul cu două ore înainte.
        outcome:
          anyOf:
            - type:
                - string
                - 'null'
              enum:
                - offer
                - again
                - not_interested
                - no_show
                - null
            - []
          description: >-
            Răspunsul de la „Cum a fost?”: `offer`, `again`, `not_interested`
            sau `no_show`. Null cât timp nu s-a spus.
        outcome_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: Când s-a spus „Cum a fost?”.
        agent:
          anyOf:
            - type:
                - object
                - 'null'
              properties:
                name:
                  type: string
                  description: >-
                    Numele contului agentului. Portalul arată numele din
                    `display_name`.
                email:
                  type:
                    - string
                    - 'null'
                  description: >-
                    Emailul agentului; `null` când nu avem o adresă reală a lui,
                    de exemplu la un coleg venit dintr-un CRM, fără email în
                    fișa lui.
              required:
                - name
                - email
            - []
          description: >-
            Cine se întâlnește cu clientul: consultantul căruia i-a ajuns
            rezervarea la un proiect, altfel cel care face vizionările
            anunțului. `name` și `email`.
        place:
          anyOf:
            - type:
                - string
                - 'null'
              enum:
                - office
                - show_flat
                - unit
                - null
            - []
          description: >-
            La un proiect al dezvoltatorului, unde se întâlnește clientul:
            `office`, `show_flat` sau `unit`. Null în rest.
        place_rooms:
          anyOf:
            - type:
                - integer
                - 'null'
            - []
          description: >-
            La un proiect al dezvoltatorului: câte camere are apartamentul pe
            care vrea să-l vadă clientul.
        seat:
          anyOf:
            - type: integer
            - []
          description: >-
            La un proiect al dezvoltatorului, locul orei: câte unul pentru
            fiecare consultant, cu același `starts_at`. 0 în rest.
      required:
        - id
        - kind
        - starts_at
        - ends_at
        - status
        - request_expires_at
        - visitor
        - source
        - duration_min
        - held
        - bookable
        - booked_at
        - proposed_starts_at
        - attendance_confirmed_at
        - reminded_day_at
        - reminded_soon_at
        - outcome
        - outcome_at
        - agent
        - place
        - place_rooms
        - seat
      additionalProperties: {}
      title: ViewingSlotApiResource
    Problem:
      type: object
      title: Problem
      properties:
        type:
          type: string
          format: uri
          description: Adresa tipului de problemă (RFC 9457).
        title:
          type: string
          description: Rezumatul problemei, în limba cererii.
        status:
          type: integer
          description: Codul HTTP.
        code:
          type: string
          description: >-
            Codul stabil al refuzului, după care tratezi eroarea (lista e în
            pagina Erori).
        detail:
          type: string
          description: Explicația, în limba cererii.
        existing:
          type: object
          properties:
            code:
              type: string
              description: Codul public al anunțului existent.
            external_ref:
              type:
                - string
                - 'null'
              description: >-
                Id-ul tău pentru anunțul existent, dacă l-ai pus tu cu `PUT
                /listings/ref/{ref}`. Altfel `null`.
          required:
            - code
            - external_ref
          description: >-
            Doar la `409 duplicate_listing`: anunțul pe care îl ai deja pentru
            aceeași proprietate.
      required:
        - type
        - title
        - status
        - code
        - detail
    ValidationProblem:
      type: object
      title: ValidationProblem
      properties:
        type:
          type: string
          format: uri
          description: Adresa tipului de problemă (RFC 9457).
        title:
          type: string
          description: Rezumatul problemei, în limba cererii.
        status:
          type: integer
          description: 'Codul HTTP: `422`.'
        errors:
          type: array
          items:
            type: object
            properties:
              pointer:
                type: string
                description: Câmpul la care se referă, ca JSON Pointer (`/features/2`).
              code:
                type: string
                description: Regula încălcată, ca cod stabil (lista e în pagina Erori).
              detail:
                type: string
                description: >-
                  Explicația, în limba cererii. Textul se poate schimba, așa că
                  tratezi eroarea după `code`.
            required:
              - pointer
              - code
              - detail
          description: Câte o intrare pentru fiecare câmp care nu trece regulile.
      required:
        - type
        - title
        - status
        - errors
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer <key>'

````

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