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

# Creează sau actualizează după id-ul tău

> Drumul recomandat pentru un CRM. Dacă id-ul e nou, anunțul se creează ca la `POST /listings` (201). Dacă e cunoscut, corpul se aplică precum un `PATCH`: câmpurile lipsă își păstrează valoarea. Același corp trimis de două ori nu scrie nimic (`X-Housera-Unchanged: true`).



## OpenAPI

````yaml ro/openapi.json PUT /listings/ref/{ref}
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 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
paths:
  /listings/ref/{ref}:
    put:
      tags:
        - Anunțurile tale
      summary: Creează sau actualizează după id-ul tău
      description: >-
        Drumul recomandat pentru un CRM. Dacă id-ul e nou, anunțul se creează ca
        la `POST /listings` (201). Dacă e cunoscut, corpul se aplică precum un
        `PATCH`: câmpurile lipsă își păstrează valoarea. Același corp trimis de
        două ori nu scrie nimic (`X-Housera-Unchanged: true`).
      operationId: v1.listings.upsert
      parameters:
        - name: ref
          in: path
          required: true
          schema:
            type: string
          description: >-
            Id-ul anunțului în sistemul tău (până la 100 de caractere: litere,
            cifre, `.` `_` `:` `/` `-`).
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: 1cf0ed17-c8b6-4714-9a6f-387181a346bd
          description: Reușit.
        '201':
          content:
            application/json:
              schema:
                $ref: 1cf0ed17-c8b6-4714-9a6f-387181a346bd
          description: Anunțul a fost creat și a intrat la moderare.
        '202':
          content:
            application/json:
              schema:
                $ref: 1cf0ed17-c8b6-4714-9a6f-387181a346bd
          description: 'Acceptat: se procesează în fundal.'
        '401':
          content:
            application/problem+json:
              schema:
                $ref: 2449e8cf-2469-4d15-b735-5241d23a2cba
          description: Cheia lipsește, e revocată sau a expirat (`unauthenticated`).
        '404':
          content:
            application/problem+json:
              schema:
                $ref: 2449e8cf-2469-4d15-b735-5241d23a2cba
          description: Anunțul nu există sau nu e al contului tău (`not_found`).
        '409':
          content:
            application/problem+json:
              schema:
                $ref: 2449e8cf-2469-4d15-b735-5241d23a2cba
          description: >-
            Anunțul e ocupat de altă scriere (`listing_busy`) sau acțiunea nu e
            permisă în starea lui (`listing_action_refused`).
components:
  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.