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

# Schimbă programul unui anunț

> Se schimbă doar câmpurile trimise. Doar `mode` schimbă modul și păstrează regulile și orele proprii, ca în portal. `null` la `duration_min` sau `confirmation` înseamnă „ca de obicei”. `runner` e emailul unui coleg activ din firmă, iar `null` lasă vizionările titularului.



## OpenAPI

````yaml ro/openapi.json PATCH /listings/{code}/viewing-schedule
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:
  /listings/{code}/viewing-schedule:
    patch:
      tags:
        - Vizionări
      summary: Schimbă programul unui anunț
      description: >-
        Se schimbă doar câmpurile trimise. Doar `mode` schimbă modul și
        păstrează regulile și orele proprii, ca în portal. `null` la
        `duration_min` sau `confirmation` înseamnă „ca de obicei”. `runner` e
        emailul unui coleg activ din firmă, iar `null` lasă vizionările
        titularului.
      operationId: v1.viewing_schedule.listing_update
      parameters:
        - name: code
          in: path
          required: true
          schema:
            type: string
          description: >-
            Codul public al anunțului (8 caractere, ca în adresa lui de pe
            Housera).
        - 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.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateListingViewingScheduleRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ListingViewingScheduleApiResource'
                    description: Rezultatul cererii.
                required:
                  - data
          description: Cererea a reușit.
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Corpul cererii nu e JSON valid (`malformed_json`).
        '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`).
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Anunțul nu există sau cheia nu are acces la el (`not_found`).
        '413':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Corpul cererii depășește 1 MB (`payload_too_large`).
        '415':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Corpul cererii nu e declarat ca JSON (`unsupported_media_type`).
            Trimite-l cu `Content-Type: application/json`.
        '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`.
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Housera a oprit temporar scrierile prin API (`api_writes_paused`).
            Reîncearcă după numărul de secunde din `Retry-After`.
components:
  schemas:
    UpdateListingViewingScheduleRequest:
      type: object
      properties:
        mode:
          $ref: '#/components/schemas/ViewingScheduleMode'
          description: Modul de trimitere.
        hours:
          type:
            - object
            - 'null'
          additionalProperties:
            type: array
            items:
              type: object
              properties:
                from:
                  type: string
                  description: Ora de început, `HH:MM`.
                to:
                  type: string
                  description: Ora de sfârșit, `HH:MM`. `24:00` e sfârșitul zilei.
              required:
                - from
                - to
          description: Orele.
        duration_min:
          type:
            - integer
            - 'null'
          enum:
            - '15'
            - '30'
            - '45'
            - '60'
            - '90'
            - null
          description: 'Durata unei vizionări, în minute: 15, 30, 45, 60 sau 90.'
        notice_min:
          type:
            - integer
            - 'null'
          enum:
            - '0'
            - '60'
            - '120'
            - '240'
            - '1440'
            - '2880'
            - null
          description: Timpul de dinainte de rezervare.
        available_from:
          type:
            - string
            - 'null'
          format: date
          description: Data disponibilității.
        confirmation:
          type:
            - string
            - 'null'
          enum:
            - auto
            - manual
            - null
          description: >-
            `auto`: o rezervare e confirmată pe loc. `manual`: vizitatorul
            trimite o cerere, iar tu o accepți sau o refuzi.
        runner:
          type:
            - string
            - 'null'
          format: email
          maxLength: 254
          description: Cine face vizionările.
        occupant:
          type: object
          properties:
            notify:
              type: boolean
              description: Dacă cel care locuiește acolo trebuie anunțat de vizionări.
            phone:
              type:
                - string
                - 'null'
              pattern: ^\+?[0-9 ()\-]{6,32}$
              maxLength: 32
              description: Telefonul.
          description: >-
            Cel care locuiește în locuință: `notify` și `phone`. Se păstrează cu
            programul anunțului.
        confirm_pending:
          type: boolean
          description: Confirmarea cererilor care așteaptă.
        blocked_dates:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              from:
                type: string
                format: date
                description: Prima zi sau ora de început a intervalului.
              to:
                type:
                  - string
                  - 'null'
                format: date
                description: Ultima zi a perioadei.
            required:
              - from
          maxItems: 50
          description: >-
            Zilele libere, ca intervale `{from, to}` de date (`Y-m-d`), cel mult
            50.
      title: UpdateListingViewingScheduleRequest
    ListingViewingScheduleApiResource:
      type: object
      properties:
        code:
          type: string
          description: Codul.
        mode:
          anyOf:
            - type: string
            - type: string
              enum:
                - inherit
          description: Modul de trimitere.
        timezone:
          type: string
          description: >-
            Fusul orar al locului anunțului (IANA). Orele programului se citesc
            pe ceasul lui.
        hours:
          type: object
          additionalProperties:
            type: array
            items:
              type: object
              properties:
                from:
                  type: string
                  description: Ora de început, `HH:MM`.
                to:
                  type: string
                  description: Ora de sfârșit, `HH:MM`. `24:00` e sfârșitul zilei.
              required:
                - from
                - to
          description: Orele.
        duration_min:
          type:
            - integer
            - 'null'
          description: 'Durata unei vizionări, în minute: 15, 30, 45, 60 sau 90.'
        notice_min:
          type:
            - string
            - 'null'
          description: Timpul de dinainte de rezervare.
        available_from:
          type:
            - string
            - 'null'
          description: Data disponibilității.
        confirmation:
          type:
            - string
            - 'null'
          description: >-
            `auto`: o rezervare e confirmată pe loc. `manual`: vizitatorul
            trimite o cerere, iar tu o accepți sau o refuzi.
        runner:
          type:
            - object
            - 'null'
          properties:
            name:
              type: string
              description: Numele.
            email:
              type:
                - string
                - 'null'
              description: Emailul colegului care face vizionările.
          required:
            - name
            - email
          description: >-
            Cine face vizionările anunțului: `name` și `email`. Titularul, dacă
            vizionările nu i-au fost date unui coleg.
        blocked_dates:
          type: array
          items:
            type: object
            properties:
              from:
                type: string
                description: Prima zi sau ora de început a intervalului.
              to:
                type: string
                description: Ultima zi a perioadei.
            required:
              - from
              - to
          description: >-
            Zilele libere, ca intervale `{from, to}` de date (`Y-m-d`), cel mult
            50.
        occupant:
          type: object
          properties:
            notify:
              type: boolean
              description: Dacă cel care locuiește acolo trebuie anunțat de vizionări.
            phone:
              type:
                - string
                - 'null'
              description: Telefonul.
          required:
            - notify
            - phone
          description: >-
            Cel care locuiește în locuință: `notify` și `phone`. Se păstrează cu
            programul anunțului.
        effective:
          type: object
          properties:
            hours:
              type: object
              additionalProperties:
                type: array
                items:
                  type: object
                  properties:
                    from:
                      type: string
                      description: Ora de început, `HH:MM`.
                    to:
                      type: string
                      description: Ora de sfârșit, `HH:MM`. `24:00` e sfârșitul zilei.
                  required:
                    - from
                    - to
              description: Orele.
            duration_min:
              type: integer
              description: 'Durata unei vizionări, în minute: 15, 30, 45, 60 sau 90.'
            buffer_min:
              type: integer
              description: Pauza dintre vizionări.
            notice_min:
              type: integer
              description: Timpul de dinainte de rezervare.
            horizon_days:
              type: integer
              description: Cât de departe se vede programul.
            confirmation:
              type: string
              description: >-
                `auto`: o rezervare e confirmată pe loc. `manual`: vizitatorul
                trimite o cerere, iar tu o accepți sau o refuzi.
            blocked_dates:
              type: array
              items:
                type: object
                properties:
                  from:
                    type: string
                    description: Prima zi sau ora de început a intervalului.
                  to:
                    type: string
                    description: Ultima zi a perioadei.
                required:
                  - from
                  - to
              description: >-
                Zilele libere, ca intervale `{from, to}` de date (`Y-m-d`), cel
                mult 50.
          required:
            - hours
            - duration_min
            - buffer_min
            - notice_min
            - horizon_days
            - confirmation
            - blocked_dates
          description: >-
            Ce generează orele acum: orele moștenite sau proprii și regulile, cu
            valorile implicite aplicate. Doar de citit.
        base_saved:
          type: boolean
          description: >-
            Dacă cel care face vizionările a salvat un program de bază. Fără el,
            `inherit` nu le dă clienților nicio oră.
        pending_requests:
          type: integer
          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ă.
        confirmed_pending:
          type: object
          properties:
            confirmed:
              type: integer
              description: Câte cereri s-au confirmat acum.
            still_waiting:
              type: integer
              description: >-
                Câte cereri mai așteaptă după salvare (peste plafonul de 100 sau
                răspunse între timp).
          required:
            - confirmed
            - still_waiting
          description: >-
            Ce s-a confirmat odată cu salvarea, când ai cerut `confirm_pending`:
            `confirmed` și `still_waiting`.
      required:
        - code
        - mode
        - timezone
        - hours
        - duration_min
        - notice_min
        - available_from
        - confirmation
        - runner
        - blocked_dates
        - occupant
        - effective
        - base_saved
        - pending_requests
      title: ListingViewingScheduleApiResource
    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
    ViewingScheduleMode:
      type: string
      enum:
        - inherit
        - own
        - on_request
      title: ViewingScheduleMode
  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.