> ## Documentation Index
> Fetch the complete documentation index at: https://doc.fluximmo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Signaler un problème sur une property

> Nous remonter une donnée fausse ou un statut erroné et déclencher une revérification gratuite.

## À quoi ça sert

`POST /v2/protected/properties/{flxId}/report` sert à nous dire ce qui ne va pas sur un bien : prix faux, annonce toujours en ligne alors que nous la donnons disparue, doublon, mauvaise agence. L'appel est **gratuit (0 crédit)**, répond **200 immédiatement** et lance en tâche de fond une revérification des annonces auprès de leurs portails.

Rappel de vocabulaire : une **property** est un bien physique dédupliqué qui agrège N **adverts**, les annonces publiées sur des portails différents (voir [Property vs Advert](/concepts/property-vs-advert)). Ce sont donc **les annonces** de la property qui repartent en collecte, pas la property elle-même.

<Warning>
  La donnée rafraîchie **n'est pas dans la réponse**. Relisez la property quelques minutes plus tard avec [`GET /v2/protected/properties/{flxId}`](/api-v2-reference/properties/get-a-property-by-its-flx_id), ou recevez-la sur votre [webhook d'alerte](/concepts/webhooks) si vous y êtes abonné.
</Warning>

## Ce qui est réellement revérifié

* **Seules les annonces en ligne** — celles déjà hors ligne sont ignorées.
* **10 annonces au maximum**, les plus récemment vues ; l'excédent est compté dans `skipped_count`.
* Une annonce **sans url source exploitable** est également comptée dans `skipped_count`.
* `skipped_count` peut aussi être non nul parce que certaines revérifications n'ont pas pu être lancées. Une rafale d'appels rapprochés rend ce cas plus probable. Ce n'est pas une erreur : espacez vos appels et réessayez.
* Si **aucune** annonce en ligne n'est revérifiable, la réponse vaut `status: "nothing_to_check"` avec `triggered_count: 0`, en **HTTP 200** — là encore, ce n'est pas une erreur.

Le tableau `triggered` liste les flx\_id **des annonces** confiées au scraper, jamais celui de la property.

<Note>
  **Le motif détermine la profondeur de la revérification.** `STILL_ONLINE` et `NOT_ONLINE_ANYMORE` portent sur la disponibilité : ils déclenchent un contrôle léger qui met à jour le statut en ligne — le même que [`/check`](/api-v2-reference/properties/request-an-on-demand-check-of-a-property). Les cinq autres motifs portent sur le contenu des annonces : ils déclenchent une **réextraction complète**, seule capable de corriger un prix, une surface, une adresse ou une agence. Choisir le motif juste n'est donc pas cosmétique.
</Note>

## Cas d'usage

* **Corriger une donnée fausse** — `WRONG_DATA` lorsque prix, surface ou nombre de pièces ne correspondent pas au portail.
* **Rétablir un statut** — `STILL_ONLINE` si nous disons le bien hors ligne alors qu'il est visible, `NOT_ONLINE_ANYMORE` dans le cas inverse.
* **Signaler un doublon** — `DUPLICATE` quand le même bien existe déjà sous un autre flx\_id.
* **Corriger la localisation ou le vendeur** — `WRONG_LOCATION` pour une géoloc ou une adresse fausse, `WRONG_AGENCY` pour un pro/particulier ou une agence mal attribués.
* **Tout le reste** — `OTHER`, qui rend alors le champ `comment` obligatoire (1000 caractères maximum).

Le contrat exact est documenté plus bas par le bloc OpenAPI (`POST /v2/protected/properties/{flxId}/report`).

## Exemples

### 1 — Signaler un prix erroné

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.fluximmo.io/v2/protected/properties/123456789/report \
    -H "x-api-key: $FLUXIMMO_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"reason": "WRONG_DATA", "comment": "Le portail affiche 450000 €, vous avez 425000 €."}'
  ```

  ```python Python theme={null}
  import os, requests

  resp = requests.post(
      "https://api.fluximmo.io/v2/protected/properties/123456789/report",
      headers={"x-api-key": os.environ["FLUXIMMO_API_KEY"]},
      json={"reason": "WRONG_DATA", "comment": "Le portail affiche 450000 €, vous avez 425000 €."},
      timeout=30,
  )
  body = resp.json()
  # `data` en 2xx, `error` en 404 / 422.
  print(resp.status_code, body.get("data", body.get("error")))
  ```
</CodeGroup>

Deux annonces en ligne sont reparties en collecte, aucune n'a été écartée :

```json Réponse 200 theme={null}
{"data":{"status":"accepted","entity":"property","flx_id":"123456789","triggered":["987654321","987654322"],"triggered_count":2,"skipped_count":0,"message":"2 advert(s) queued for an on-demand re-check."}}
```

Quand des annonces sont écartées, `message` le dit : le suffixe ` 3 advert(s) skipped.` est ajouté au message nominal, et si **rien** n'a pu partir alors que des annonces étaient éligibles, le message devient `No advert queued: 3 advert(s) skipped (per-request cap, missing url, or too many scrapes already running).`

### 2 — Motif libre, sur une property dont les annonces sont toutes hors ligne

```bash curl theme={null}
curl -X POST https://api.fluximmo.io/v2/protected/properties/123456789/report \
  -H "x-api-key: $FLUXIMMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason": "OTHER", "comment": "Les photos ne correspondent pas au bien décrit."}'
```

Le signalement est bien enregistré, mais il n'y avait rien à revérifier — d'où le `200` avec `nothing_to_check` :

```json Réponse 200 theme={null}
{"data":{"status":"nothing_to_check","entity":"property","flx_id":"123456789","triggered":[],"triggered_count":0,"skipped_count":0,"message":"No online advert to re-check."}}
```

## Erreurs spécifiques

* **404** — le flx\_id n'existe pas : `{"error":{"message":"Property with flx_id 123456789 not found","code":10003}}`.
* **422** — corps invalide (et non 400), code `10002`, avec un seul message : `"comment is required when reason is OTHER"` ou `"reason must be one of the following values: STILL_ONLINE, NOT_ONLINE_ANYMORE, WRONG_DATA, WRONG_LOCATION, DUPLICATE, WRONG_AGENCY, OTHER"`. Un seul message est renvoyé par appel même si plusieurs champs sont invalides : branchez votre logique sur le **code**, pas sur le libellé. Les espaces de début et de fin du commentaire sont retirés : un commentaire composé uniquement d'espaces est donc refusé.
  Les clés inconnues envoyées dans le corps sont **silencieusement ignorées**. La liste complète des codes est sur [Codes d'erreur](/ressources/codes-erreur).

<Tip>
  Il n'y a **aucun cooldown** : chaque appel relance des vérifications. Signalez sans hésiter, c'est gratuit et cela améliore la base pour tout le monde. L'équivalent existe sur les annonces : [`POST /v2/protected/adverts/{flxId}/report`](/api-v2-reference/adverts/report-an-issue-on-an-advert).
</Tip>

## Liens utiles

* [Concept · Property vs Advert](/concepts/property-vs-advert)
* [Relire la property après signalement](/api-v2-reference/properties/get-a-property-by-its-flx_id)
* [Revérifier une property](/api-v2-reference/properties/request-an-on-demand-check-of-a-property) — même mécanique, sans diagnostic, facturée 1 crédit.
* [Concept · Webhooks](/concepts/webhooks)
* [Ressources · Codes d'erreur](/ressources/codes-erreur)
* [Ressources · Bonnes pratiques](/ressources/bonnes-pratiques)

<Card title="Clé test gratuite — 1 semaine" icon="key" href="https://my.fluximmo.io">
  Créez un compte sur **my.fluximmo.io** pour récupérer une clé API test gratuite (1 semaine, accès limité). Aucun paiement requis.
</Card>


## OpenAPI

````yaml post /v2/protected/properties/{flxId}/report
openapi: 3.0.0
info:
  title: Real-estate data API - Fluximmo V2
  description: >+
    ## Fluximmo

    ##### Real-time real estate data: Power workflows, business applications and
    decision-making.


    Real estate expert since 2017, Fluximmo aggregates, exploits, enriches &
    analyzes the 


    real-estate market in real time to offer data flows, APIs and innovative
    services to real estate professionals.


    ## Authentification

    You'll need to be authenticated with an active subscription to access our
    REST endpoints.


    To get an API-KEY please contact us at contact@fluximmo.com or book a call
    with our team: https://calendly.com/fluximmo/meet-fluximmo

    ##### How to use your API KEY

    Simply add to your HTTP request your API KEY in the headers:
    `{'x_api_key':'randomApiKey'}`


    ## Properties and Adverts

    Real-estate market can be conceptualized in different ways. We offer two
    different conceptualization depending on your needs: Properties & Adverts.

    #### Properties (BAAS)

    A property is a real-estate habitation/land/commercial/building to which is
    attached adverts.


    We gather all the adverts offering (selling or renting) this real-estate
    asset and consolidate all the information into one Property.


    A Property is by definition `de-duplicated` and can gather 1 to x adverts:
    these adverts are either duplicates from different portals or with mandates
    from different agencies or republication of the same advertising with a
    price update or not.


    The concept of property is in constant mutation until the real-estate asset
    is sold: We'll keep merging new adverts within the Property concept and
    update the price if needed.


    By it's nature in constant mutation, we do not offer the possibility to
    receive these Properties on webhooks. You'll need to use our APIs as a
    Backend As A Service (BaaS).


    #### Adverts (BAAS and WEBHOOK)

    Adverts are advertising of a real-estate property. Adverts can come from
    many sources: Agencies websites, Aggregation real-estate portals,
    Social-Networks, NewsPaper etc...


    After gathering all these adverts our proprietary AI algorithms will
    de-duplicate these adverts and associate them to a Property


    An advert have a unique URL. Meaning that the same advertising re-published
    twice (with our without any change, on the same website or not, by the same
    agency or not) is considered as 2 ads.


    You can choose either to retrieve all the Adverts or only the non duplicated
    ones. Adverts can be retrieved either by API (Search or Alerts) or Webhook

    ## Webhooks

    We offer the possibility to receive our real-estate Adverts data in
    real-time using webhooks. As soon as we gather the data, you'll receive it
    few moments later.


    Using ALERTS, you can receive new adverts matching your criteria on a
    webhook.


    ##### Webhook differences between Adverts and Properties

    As Properties are by nature in perpetual evolutions (new duplicated ads will
    be merged, new data to be consolidated etc..), we do not offer the
    possibility to receive through Webhooks the full body of the properties.
    Properties webhook will only send you the list of the properties FlxIds
    matching your search.


    You'll find below the schema of the data you would receive on your webhook
    (`/v2/sample/webhook/properties`, `/v2/sample/webhook/adverts`)

    ##### What is a webhook

    A webhook can be thought of as a type of API that is driven by events rather
    than requests


    .Instead of one application making a request to another to receive a
    response, a webhook is a service that allows one program to send data to
    another as soon as a particular event takes place.


    Webhooks are sometimes referred to as “reverse APIs,” because communication
    is initiated by the application sending the data rather than the one
    receiving it.


    With web services becoming increasingly interconnected, webhooks are seeing
    more action as a lightweight solution for enabling real-time notifications
    and data updates without the need to develop a full-scale API.

    ##### When to use a webhook instead of the REST API

    You're supposed to receive a high volume of data (frequently or not), you're
    looking for real-time data, you just have to relax and wait (no cron, no
    call on our API etc..)

    ##### Webhook implementation examples

    A webhook is simply a POST endpoint we can request

    * Python:
    https://gist.github.com/aloysius-tim/293772256526efa20d5c625c6ace036a

    * Node:
    https://gist.github.com/aloysius-tim/ea1d9feb2c527b5b09ffc356b662d14b

  version: 2.0.0
  contact: {}
  x-logo:
    url: https://www.fluximmo.com/assets/images/logo_text.png
    backgroundColor: '#F31051'
    altText: Fluximmo logo
servers:
  - url: https://api.fluximmo.io
security: []
tags:
  - name: PropertyModel
    description: <SchemaDefinition schemaRef="#/components/schemas/PropertyDto" />
  - name: AdvertModel
    description: <SchemaDefinition schemaRef="#/components/schemas/AdvertDto" />
paths:
  /v2/protected/properties/{flxId}/report:
    post:
      tags:
        - Properties
      summary: Report an issue on a property
      description: >-
        Report a problem on a property (wrong data, still online, duplicate...).
        Free. Answers 200 immediately and re-checks its online adverts against
        their portals in the background — the 10 most recently seen at most, see
        `skipped_count`. Read the refreshed documents a couple of minutes later
        with GET /v2/protected/properties/{flxId}, or receive them on your alert
        webhook.
      operationId: PropertiesController_reportPropertyIssue
      parameters:
        - name: flxId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportIssuePayloadDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/RecheckResponseDto'
        '400':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionDto'
        '401':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionDto'
        '404':
          description: ''
          content:
            application/json:
              schema:
                type: object
                example:
                  error:
                    message: Not Found
                    code: 10003
        '422':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionDto'
      security:
        - x_api_key: []
components:
  schemas:
    ReportIssuePayloadDto:
      type: object
      properties:
        reason:
          type: string
          description: What is wrong with this advert or property
          enum:
            - STILL_ONLINE
            - NOT_ONLINE_ANYMORE
            - WRONG_DATA
            - WRONG_LOCATION
            - DUPLICATE
            - WRONG_AGENCY
            - OTHER
          example: STILL_ONLINE
        comment:
          type: string
          description: >-
            Free-text details. Optional, except when `reason` is `OTHER` where
            it is required.
          maxLength: 1000
          example: The ad is still visible on seloger, you flagged it offline.
      required:
        - reason
    RecheckResponseDto:
      type: object
      properties:
        status:
          type: string
          enum:
            - accepted
            - nothing_to_check
          example: accepted
        entity:
          type: string
          enum:
            - advert
            - property
          example: property
        flx_id:
          type: string
          description: flx_id the request was made on
          example: '123456789'
        triggered:
          description: flx_id of every advert handed to the scraper
          example:
            - '987654321'
            - '987654322'
          type: array
          items:
            type: string
        triggered_count:
          type: number
          example: 2
        skipped_count:
          type: number
          description: >-
            Online adverts that were NOT re-checked: beyond the per-request cap,
            missing a source url, or dropped because too many scrapes are
            already running
          example: 0
        message:
          type: string
          example: 2 advert(s) queued for an on-demand re-check.
      required:
        - status
        - entity
        - flx_id
        - triggered
        - triggered_count
        - skipped_count
        - message
    ExceptionDto:
      type: object
      properties:
        error:
          description: Error object
          allOf:
            - $ref: '#/components/schemas/ErrorDto'
      required:
        - error
    ErrorDto:
      type: object
      properties:
        message:
          type: string
          description: Error message
        code:
          type: number
          description: Error code
      required:
        - message
        - code
  securitySchemes:
    x_api_key:
      type: apiKey
      in: header
      name: x-api-key

````