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

# Enriquecimento de Imóvel

> Receba notificações quando os dados de um imóvel são enriquecidos automaticamente.

## Visão Geral

O webhook de **Enriquecimento de Imóvel** é disparado pela Morada.ai quando o processo automático de enriquecimento de dados de um imóvel é concluído. Inclui informações como nome do local, descrição, pontos de interesse próximos e mídias associadas.

<Note>
  Este webhook é específico para parceiros que utilizam o módulo de enriquecimento de propriedades (Enri). Consulte o suporte para verificar a disponibilidade.
</Note>

## Payload

```json theme={null}
{
  "source": {
    "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    "name": "Edifício Aurora Torre A",
    "external_id": "EMP-12345"
  },
  "enrichment": {
    "place_name": "Edifício Aurora",
    "meta": {
      "description": "Empreendimento residencial de alto padrão localizado na Zona Sul de São Paulo, próximo ao Parque do Ibirapuera. Oferece apartamentos de 2 e 3 dormitórios com varanda gourmet."
    },
    "points_of_interest": [
      { "name": "Metrô Brigadeiro" },
      { "name": "Shopping Ibirapuera" },
      { "name": "Parque do Ibirapuera" },
      { "name": "Hospital São Luiz" }
    ],
    "media": [
      {
        "url": "https://storage.morada.ai/media/foto-fachada.jpg",
        "group": "facade",
        "description": "Fachada principal do empreendimento"
      },
      {
        "url": "https://storage.morada.ai/media/foto-lazer.jpg",
        "group": "common_area",
        "description": "Área de lazer com piscina e churrasqueira"
      }
    ]
  },
  "metadata": {
    "timestamp": "2026-05-13T18:30:00.000Z",
    "eventType": "property_enrichment"
  }
}
```

## Campos

### source

| Campo                | Tipo   | Descrição                           |
| -------------------- | ------ | ----------------------------------- |
| `source.id`          | string | ID interno do enriquecimento        |
| `source.name`        | string | Nome do imóvel/empreendimento       |
| `source.external_id` | string | ID do imóvel no sistema do parceiro |

### enrichment

| Campo                                  | Tipo           | Descrição                                                                  |
| -------------------------------------- | -------------- | -------------------------------------------------------------------------- |
| `enrichment.place_name`                | string \| null | Nome do local identificado                                                 |
| `enrichment.meta.description`          | string \| null | Descrição gerada automaticamente sobre o imóvel e região                   |
| `enrichment.points_of_interest`        | array \| null  | Lista de pontos de interesse próximos                                      |
| `enrichment.points_of_interest[].name` | string         | Nome do ponto de interesse                                                 |
| `enrichment.media`                     | array          | Lista de mídias associadas ao imóvel                                       |
| `enrichment.media[].url`               | string         | URL da mídia                                                               |
| `enrichment.media[].group`             | string         | Categoria da mídia (ex: `facade`, `common_area`, `floor_plan`, `interior`) |
| `enrichment.media[].description`       | string         | Descrição da mídia                                                         |

### metadata

| Campo                | Tipo   | Descrição                                |
| -------------------- | ------ | ---------------------------------------- |
| `metadata.timestamp` | string | Data/hora do envio do webhook (ISO 8601) |
| `metadata.eventType` | string | Sempre `"property_enrichment"`           |

## Exemplo de uso

<CodeGroup>
  ```javascript Node.js theme={null}
  app.post("/webhook/morada", (req, res) => {
    const { source, enrichment } = req.body;

    console.log(`Enriquecimento concluído: ${source.name} (${source.external_id})`);

    if (enrichment.place_name) {
      console.log(`Local: ${enrichment.place_name}`);
    }

    if (enrichment.points_of_interest) {
      const pois = enrichment.points_of_interest.map(p => p.name).join(", ");
      console.log(`Pontos de interesse: ${pois}`);
    }

    console.log(`Mídias: ${enrichment.media.length} arquivo(s)`);

    // Atualizar ficha do imóvel no seu sistema

    res.status(200).json({ received: true });
  });
  ```

  ```python Python theme={null}
  @app.route("/webhook/morada", methods=["POST"])
  def handle_webhook():
      data = request.json
      source = data["source"]
      enrichment = data["enrichment"]

      print(f"Enriquecimento: {source['name']} ({source['external_id']})")

      if enrichment.get("points_of_interest"):
          pois = [p["name"] for p in enrichment["points_of_interest"]]
          print(f"Pontos de interesse: {', '.join(pois)}")

      print(f"Mídias: {len(enrichment['media'])} arquivo(s)")

      return jsonify({"received": True}), 200
  ```
</CodeGroup>

## Resposta esperada

Retorne um status HTTP `200` para confirmar o recebimento:

```json theme={null}
{
  "received": true
}
```

<Warning>
  Se o seu endpoint retornar um status diferente de `2xx` ou não responder dentro do timeout, a Morada.ai poderá tentar reenviar o evento. Implemente idempotência para lidar com entregas duplicadas.
</Warning>
