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

# Răspunde clientului

> Trimite un mesaj în conversația cererii, ca din Mesaje în portal: clientul îl vede în conversație și primește aceleași notificări. Cu `Idempotency-Key`, o cerere repetată în 10 minute întoarce mesajul trimis prima dată (200) și nu mai trimite altul. Răspunsurile intră în aceeași limită ca cele din portal: 20 pe minut și 200 pe oră pe cont. Cere drepturile `leads:read` și `leads:write`.



## OpenAPI

````yaml ro/openapi.json POST /leads/{lead}/messages
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:
  /leads/{lead}/messages:
    post:
      tags:
        - Cererile clienților
      summary: Răspunde clientului
      description: >-
        Trimite un mesaj în conversația cererii, ca din Mesaje în portal:
        clientul îl vede în conversație și primește aceleași notificări. Cu
        `Idempotency-Key`, o cerere repetată în 10 minute întoarce mesajul
        trimis prima dată (200) și nu mai trimite altul. Răspunsurile intră în
        aceeași limită ca cele din portal: 20 pe minut și 200 pe oră pe cont.
        Cere drepturile `leads:read` și `leads:write`.
      operationId: v1.leads.messages.store
      parameters:
        - name: lead
          in: path
          required: true
          schema:
            type: integer
          description: >-
            Id-ul cererii, din listă sau din evenimentele `lead.created` și
            `lead.updated`.
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
          description: >-
            O valoare unică pentru această creare (de exemplu un UUID). O cerere
            repetată cu aceeași valoare, în 10 minute, întoarce ce a creat
            prima, fără să creeze altceva: anunțul la `POST /listings`,
            contactul la `POST /leads`, mesajul la `POST
            /leads/{lead}/messages`. La anunțuri și la mesaje contează primele
            64 de caractere.
        - 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:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                body:
                  type: string
                  maxLength: 2000
                  description: Mesajul.
              required:
                - body
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/LeadMessageApiResource'
                    description: Rezultatul cererii.
                required:
                  - data
          description: >-
            Mesajul fusese trimis deja cu același `Idempotency-Key`. Răspunsul
            îl conține.
        '201':
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/LeadMessageApiResource'
                    description: Rezultatul cererii.
                required:
                  - data
          description: Mesajul a fost trimis. Răspunsul îl conține.
        '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 drepturile cerute (`missing_ability`) sau conversația e
            a altui cont (`conversation_not_held`).
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: Cererea nu există sau cheia nu are acces la ea (`not_found`).
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Cererea nu are conversație (`no_conversation`), conversația e doar
            de citit (`conversation_closed`), una dintre părți a blocat-o pe
            cealaltă (`conversation_blocked`) sau același mesaj tocmai a fost
            trimis (`message_duplicate`).
        '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:
    LeadMessageApiResource:
      type: object
      properties:
        id:
          type: integer
          description: >-
            Id-ul mesajului. E același în evenimentul `lead.message_received`
            (`message_id`).
        direction:
          type: string
          enum:
            - out
            - in
          description: >-
            `in` pentru un mesaj de la client, `out` pentru unul trimis de
            partea anunțului (de tine sau de un coleg care s-a ocupat înainte de
            anunț).
        author:
          type:
            - object
            - 'null'
          properties:
            name:
              type: string
              description: Numele.
          required:
            - name
          description: >-
            Cine a scris mesajul, cu numele așa cum îl arată conversația din
            portal.
        body:
          type:
            - string
            - 'null'
          description: Textul mesajului. `null` pentru un mesaj șters.
        kind:
          type:
            - string
            - 'null'
          enum:
            - viewing_request
            - null
          description: >-
            `viewing_request` pentru mesajul cu care clientul a cerut o
            vizionare, altfel `null`.
        deleted:
          type: boolean
          description: >-
            `true` când autorul a șters mesajul. Mesajul își păstrează locul,
            fără text.
        edited_at:
          type:
            - string
            - 'null'
          description: >-
            Momentul ultimei editări (ISO 8601), `null` dacă mesajul nu a fost
            editat.
        read_at:
          type:
            - string
            - 'null'
          description: >-
            Momentul în care cealaltă parte a citit mesajul (ISO 8601), `null`
            cât timp nu l-a citit.
        created_at:
          type:
            - string
            - 'null'
          description: Momentul trimiterii (ISO 8601).
      required:
        - id
        - direction
        - author
        - body
        - kind
        - deleted
        - edited_at
        - read_at
        - created_at
      title: LeadMessageApiResource
    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.