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

# Setează planurile

> Lista completă a planurilor anunțului, câte unul pe nivel, în ordinea afișării. Fiecare plan are o imagine (un URL sau o cheie de încărcare), nivelul și punctele care arată unde a fost făcută fiecare poză. Un plan care lipsește din listă se șterge. Răspunsul vine imediat (202), planurile se procesează în fundal, iar `media.processing` arată când s-a terminat.



## OpenAPI

````yaml ro/openapi.json PUT /listings/{code}/floor-plans
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}/floor-plans:
    put:
      tags:
        - Poze
      summary: Setează planurile
      description: >-
        Lista completă a planurilor anunțului, câte unul pe nivel, în ordinea
        afișării. Fiecare plan are o imagine (un URL sau o cheie de încărcare),
        nivelul și punctele care arată unde a fost făcută fiecare poză. Un plan
        care lipsește din listă se șterge. Răspunsul vine imediat (202),
        planurile se procesează în fundal, iar `media.processing` arată când s-a
        terminat.
      operationId: v1.listings.floor_plans
      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:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                floor_plans:
                  type: array
                  items:
                    type: object
                    properties:
                      url:
                        type:
                          - string
                          - 'null'
                        maxLength: 2048
                        description: >-
                          Adresa imaginii planului. La scriere, un URL https de
                          pe care Housera descarcă planul sau adresa unui plan
                          deja pe anunț, care rămâne.
                      key:
                        type:
                          - string
                          - 'null'
                        maxLength: 255
                        description: >-
                          Cheia de încărcare a imaginii, primită de la `POST
                          /uploads`, în locul lui `url`.
                      level:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Nivelul planului, cu un cod din `levels` din `/schema`
                          (de exemplu `ground`).
                      hotspots:
                        type:
                          - array
                          - 'null'
                        items:
                          type: object
                          properties:
                            x:
                              type: number
                              minimum: 0
                              maximum: 1
                              description: >-
                                Poziția orizontală a punctului pe imagine, între
                                0 (marginea din stânga) și 1 (marginea din
                                dreapta).
                            'y':
                              type: number
                              minimum: 0
                              maximum: 1
                              description: >-
                                Poziția verticală a punctului pe imagine, între
                                0 (sus) și 1 (jos).
                            angle:
                              type:
                                - number
                                - 'null'
                              minimum: 0
                              maximum: 360
                              description: >-
                                Direcția în care privește poza, în grade, între
                                0 și 360.
                            photo_url:
                              type:
                                - string
                                - 'null'
                              maxLength: 2048
                              description: >-
                                Poza punctului: URL-ul cu care ai trimis-o în
                                `PUT /listings/{code}/photos` sau adresa ei din
                                `photos[].url`.
                            photo_key:
                              type:
                                - string
                                - 'null'
                              maxLength: 255
                              description: >-
                                Poza punctului, prin cheia de încărcare cu care
                                ai trimis-o în `PUT /listings/{code}/photos`.
                          required:
                            - x
                            - 'y'
                        maxItems: 40
                        description: >-
                          Punctele de pe plan: unde a fost făcută o poză și în
                          ce direcție privește. O poză are cel mult un punct, pe
                          toate planurile la un loc.
                  maxItems: 12
                  description: >-
                    Planurile anunțului, câte unul pe nivel, în ordinea
                    afișării, cu punctele care leagă pozele de plan.
              required:
                - floor_plans
      responses:
        '202':
          content:
            application/json:
              schema:
                type: object
                properties:
                  queued:
                    type: integer
                    description: >-
                      Câte poze au intrat la procesare. Rezultatul vine în
                      evenimentele `media.*`.
                  warnings:
                    type: array
                    items:
                      type: object
                      properties:
                        pointer:
                          type: string
                          description: >-
                            Câmpul la care se referă, ca JSON Pointer
                            (`/features/2`).
                        code:
                          type: string
                          const: plan_level_gone
                          description: >-
                            Motivul, ca cod stabil: `not_for_type`,
                            `not_for_transaction`, `unknown_feature`,
                            `unknown_field`, `agent_not_member`,
                            `agent_not_allowed` sau `area_from_pin`. Ce înseamnă
                            fiecare e în pagina Editarea.
                      required:
                        - pointer
                        - code
                    description: >-
                      Ce a ignorat Housera din cerere fără să o refuze, de
                      exemplu un câmp care nu există pentru tipul și tranzacția
                      anunțului sau o dotare necunoscută. Cererea a reușit, dar
                      e bine să-ți verifici maparea.
                required:
                  - queued
                  - warnings
          description: Cererea a fost acceptată și se procesează în fundal.
        '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:
    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.